【发布时间】:2015-07-15 16:18:58
【问题描述】:
在下面的代码中,我将字典的多个实例捆绑到一个列表中。现在我只想从列表中选择不同的值。为此,我尝试使用 distinct 和 group by,但这对我没有帮助。任何人都可以帮助我使用 linq 只选择不同的吗?
IList<Dictionary<string, string>> lst = new List<Dictionary<string, string>>();
Dictionary<string, string> d = new Dictionary<string, string>();
Dictionary<string, string> d1 = new Dictionary<string, string>();
Dictionary<string, string> d3 = new Dictionary<string, string>();
d.Add("12345", "xyz");
d1.Add("12345", "xyz");
d3.Add("123456", "xyz-abc");
lst.Add(d);
lst.Add(d1);
lst.Add(d3);
var result = lst.Distinct(); //test => test.Values.ToString().Trim()); //.Select(grp => grp.First());
【问题讨论】:
-
不同的值意味着不同的字典(这就是你目前正在尝试做的)?或者所有字典中的值(这可能更有意义)?
-
你需要添加一个类implents
IEqualityComparer<TSource> comparer -
它可以正常工作。您的字典列表中的所有三个项目都是独一无二的。
-
实例不同但值相同,我想选择不同的相同值
-
你会得到三个不同的字典。试试
d["12345"] = "abc";,你会发现d1["12345"]仍然是"xyz"。如果您想说如果两个(或更多)字典包含具有“相同”键和值的 KeyValuePairs,则您希望将它们视为“相同”,那么您需要在IEqualityComparer中实现该逻辑并使用它Distinct 的重载。