6

集合喜欢HashTable并且Dictionary不允许添加具有相同键的值,但我想将具有相同键的相同值存储在Collection<int,string>.

是否有一个内置的集合可以让我这样做?

4

3 回答 3

11

您可以使用List<T>包含自定义类的 a,甚至可以使用List<Tuple<int,string>>.

List<Tuple<int,string>> values = new List<Tuple<int,string>>();

values.Add(Tuple.Create(23, "Foo"));
values.Add(Tuple.Create(23, "Bar"));

或者,您可以创建一个Dictionary<int, List<string>>(或其他一些字符串集合),并以这种方式填充值。

Dictionary<int, List<string>> dict = new Dictionary<int, List<string>>();
dict.Add(23, new List<string> { "Foo", "Bar" });

这样做的优点是仍然可以通过键快速查找,同时允许每个键有多个值。但是,稍后添加值有点棘手。如果使用它,我会将值的添加封装在一个方法中,即:

void Add(int key, string value)
{
    List<string> values;
    if (!dict.TryGetValue(key, out values))
    {
        values = new List<string>();
        dict[key] = values;
    }

    values.Add(value);
}
于 2013-01-03T20:24:47.443 回答
6

将 aList与自定义Class.

public class MyClass
{
    public int MyInt { get; set; }
    public string MyString { get; set; }
}

List<MyClass> myList = new List<MyClass>();
myList.Add(new MyClass { MyInt = 1, MyString = "string" });
于 2013-01-03T20:24:40.287 回答
2

简而言之:最简单的方法是List<T>跳过课程的通用集合ArrayList。因为,您需要考虑一些性能注意事项。

此外,您还可以使用List<KeyValuePair<string,int>>. 这将存储一个KeyValuePair可以重复的 's 列表。

在决定是否使用List<T> or ArrayList具有相似功能的类时,请记住List<T>该类在大多数情况下性能更好并且是类型安全的。如果引用类型用于类的类型 T,List<T>则两个类的行为是相同的。但是,如果将值类型用于类型 T,则需要考虑实现和装箱问题。

作为参考:您可以使用以下 MSDN 文章 - List Class

于 2013-01-03T20:37:49.877 回答