如何在C#中找到字典值的联合?

时间:2015-01-25 12:34:04

标签: c# dictionary

我需要找出字典值的联盟。我在下面创建了字典。

Dictionary<int, List<string>> dict = new Dictionary<int, List<string>>();
List<string> ls1 = new List<string>();
ls1.Add("1");
ls1.Add("2");
ls1.Add("3");
ls1.Add("4");

List<string> ls2 = new List<string>();

ls2.Add("1");
ls2.Add("5");
dict.Add(1, ls1);
dict.Add(2, ls2);

所以在这种情况下输出将是{“1”,“2”,“3”,“4”,“5”}

3 个答案:

答案 0 :(得分:6)

Dictionary<TKey, TValue>实现IEnumerable<KeyValuePair<TKey, TValue>>时,您可以使用Linq。

以下Linq将获得您的目标:

dict.SelectMany(kvp => kvp.Value).Distinct()

SelectMany将选择列表的所有元素,Distinct()确保重复元素只返回一次。

如评论中所述,您需要List<string>结果,因此代码可能会扩展为:

var result = dict.SelectMany(kvp => kvp.Value).Distinct().ToList();

答案 1 :(得分:1)

您只需要使用Distinct

来展平值并消除重复项
dict.SelectMany(x => x.Value).Distinct();

答案 2 :(得分:0)

要获得值的联合,可以使用LINQ Union:

 dict.Values.Union(dict.Values);