像HashTable
和Dictionary
这样的集合不允许使用相同的键添加值,但我想在Collection<int,string>
中存储具有相同键的相同值。
是否有内置的集合可以让我这样做?
像HashTable
和Dictionary
这样的集合不允许使用相同的键添加值,但我想在Collection<int,string>
中存储具有相同键的相同值。
是否有内置的集合可以让我这样做?
你可以使用包含自定义类的 List<T>
,甚至是 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);
}
Class
和List
。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" });
List<T>
集合,跳过 ArrayList
类。因为需要考虑一些性能方面的问题。List<KeyValuePair<string,int>>
。
这将存储一组可重复的 KeyValuePair
。List<T> 或 ArrayList
类时,请记住,在大多数情况下,List<T>
类性能更好且类型安全。如果在 List<T>
类型 T 中使用引用类型,则两个类的行为相同。但是,如果使用值类型作为类型 T,则需要考虑实现和装箱问题。ArrayList
呢?当考虑适当的数据结构时,我甚至不会考虑或展示它作为一个选项。只有在被迫使用时才会使用它。 - Servy
Dictionary<int,IEnumerable<string>>
。 - L.BTuple.Item2 =“Left”
的Tuple.Item1
项目存储在不同的集合中,以此类推。 - Elmo