如何缩短列表<List<KeyValuePair<string, string>>>?

问题描述 投票:0回答:5

我想在结构中存储键值对列表的列表。这看起来打字太麻烦了。什么更好?文本

List<Dictionary<string, string>>
会增加很多开销吗?还有哪些其他选择?

c# list types collections generics
5个回答
14
投票

考虑使用别名作为速记:

namespace Application
{
    using MyList = List<List<KeyValuePair<string, string>>>;

    public class Sample
    {
        void Foo()
        {
            var list = new MyList();
        }
    }
}

4
投票

List
Dictionary
都非常高效,所以我不会三思而行使用它们。 (除非您要在列表中存储大量字典,但这并不常见。)

如果您认为

List<Dictionary<string, string>>
打字太多,您可以在序言中说

using LoDSS = System.Collections.Generic.List<System.Collections.Generic.Dictionary<string, string>>;

请注意,这只是一个别名,不需要子类化。


2
投票

Dictionary< string, string> 和 List< KeyValuePair< string, string>> 都可以,具体取决于您想要传递的数据。另外,如果您要在所有地方使用相同的长类型,您可以在其他地方定义该类型作为简写。像这样的东西:

public class MyShorthand : List<List<KeyValuePair<string, string>>> { }

或者您可以使用 using 语句来定义类型别名,如下所示:

using MyShorthand = System.Collections.Generic.List<System.Collections.Generic.List<System.Collections.Generic.KeyValuePair<string, string>>>;

0
投票

如果您通过键访问值,请使用字典,这就是目的。为了减少字典的开销,请尝试给它们一个初始容量。

或者(如果两个列表都相当小),您可以实现自定义哈希对象,如下所示(除了更漂亮之外):

public class MyDictionary
{
    private Dictionary<string, string> values;

    public MyDictionary()
    {
        values = new Dictionary<string, string>();
    }

    public void Add(int index, string key, string value)
    {
        int hash = ((0xFFFF) & index) * (0xFFFF) + (0xFFFF) & key.GetHashCode();
        values.Add(hash, value);
    }
    public string Get(int index, string key)
    {
        int hash = ((0xFFFF) & index) * (0xFFFF) + (0xFFFF) & key.GetHashCode();
        return values[hash];
    }
}

0
投票

为了清楚起见,我会将您的

KeyValuePair<string, string>
包装成更短的内容,例如
StringPair
并定义
StringPair
列表的简写。恕我直言,这将缩短您的语法并提高可读性。

public class StringPair : KeyValuePair<string, string> { }

public class StringPairList : List<stringPair> { }

..


var jaggedList = new List<StringPairList>();
© www.soinside.com 2019 - 2024. All rights reserved.