如何在列表中存储值及其字符串列表

时间:2014-06-28 13:56:13

标签: c# .net linq

我需要在List中存储一个值及其相应的字符串List。像

  Key   Value     
  2      2,3
  2      4,6
  4      3,5,6

 This should be in a list

这里我不能使用词典,因为相同的键可能会重复。任何人都知道如何帮助

4 个答案:

答案 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