我需要在List中存储一个值及其相应的字符串List。像
Key Value
2 2,3
2 4,6
4 3,5,6
This should be in a list
这里我不能使用词典,因为相同的键可能会重复。任何人都知道如何帮助
答案 0 :(得分:4)
使用Lookup
。这就像字典一样,只允许多次使用相同的密钥。
Here are the docs。您必须在序列上使用.ToLookup
扩展方法来创建一个。
在您的情况下,您似乎需要ILookup<string, IList<string>>
(或int
代替string
,我不知道您的数据。
以下是生成查找的方法:
IEnumerable<KeyValuePair<string, IEnumerable<string>> myData = new[] {
new KeyValuePair<string, IEnumerable<string>>("2", new[] { "2", "3" }),
new KeyValuePair<string, IEnumerable<string>>("2", new[] { "4", "6" }),
new KeyValuePair<string, IEnumerable<string>>("4", new[] { "3", "5", "6" }),
};
var myLookup = myData.ToLookup(item => item.Key, item => item.Value.ToList());
答案 1 :(得分:1)
如何区分两个'2'键?如果你不需要,那么使用int列表列表呢?键是键,值是所有重复键的列表列表。
Dictionary<int, List<List<int>>> map;
喜欢这个
var map = new Dictionary<int, List<List<int>>>();
map[2] = new List<List<int>>();
map[2].Add(new List<int>(){ 2, 3});
map[2].Add(new List<int>(){ 4, 6});
map[4] = new List<List<int>>();
map[4].Add(new List<int>(){ 3, 5, 6});
foreach(var key in map.Keys)
{
foreach(var lists in map[key])
{
Console.WriteLine("Key: {0}", key);
foreach(var item in lists)
{
Console.Write(item);
}
Console.WriteLine();
}
}
如果确实需要区分键,则需要为自定义类提供自定义hashCode(覆盖GetHashCode()函数),或者找到其他类型作为键来保证唯一性。
答案 2 :(得分:1)
或者,只需保持简单并制作课程。
public class ClassNameHere
{
public int Key { get; set; }
public List<string> Values { get; set; }
}
然后使用linq进行查找等。
var someList = new List<ClassNameHere>();
//add some data
var lookupResult = someList.Where(x=>x.Key == 2);
答案 3 :(得分:0)
如果你不喜欢(由于某些原因)使用Lookup
它如何建议Lucas,并想要使用List
类,你可以使用以下奇怪的结构:
var list = new List<Tuple<string, List<string>>> {
new Tuple<string, List<string>>("2", new List<string> {"2", "3"})
};
但是,我认为在使用之前你应该三思而后行。当然,最好使用Lookup
。