LINQ解决方案,用于计算列表

时间:2016-12-05 20:15:48

标签: c# linq list ienumerable

我有List<IEnumerable<int>>。我想计算列表中每个IEnumerable<int>的出现次数。例如:

using System.Linq;
List<IEnumerable<int>> list = new List<IEnumerable<int>>();
    list.Add(new int[] { 5 }.AsEnumerable() );
    list.Add(new int[] { 7, 8 }.AsEnumerable());
    list.Add(new int[] { 5 }.AsEnumerable());
    list.Add(new int[] { 5 }.AsEnumerable());
    list.Add(new int[] { 9 }.AsEnumerable());
    list.Add(new int[] { 4 }.AsEnumerable());

list的{​​{1}} 3IEnumerable<int>s5出现其他元素。

我试过了:

1

不幸的是,这两者都会导致var one = list.ToArray().GroupBy(i => i).ToDictionary(x => x.Key.ToArray(), x => x.Count()); var two = list.GroupBy(x => x).Select(x => x).ToDictionary(x => x.Key, x => x.Count()); foreach(var item in one) { //or two Console.WriteLine("key {0} .. item {1}", string.Join(", ", item.Key.ToArray()), item.Value); } 出现次数(即使1的值IEnumerable<int>s出现5次。

有任何建议吗?



修改

正如MarcinJuraszek所指出的那样:“你必须定义一个自定义比较器,因为IEnumerable的默认比较器将执行引用相等。” 我得到所有1的原因是因为它正在搜索内存中的地址,这些都是不同的。为了解决这个问题而不编写自定义比较器,我做到了这一点:

3

0 个答案:

没有答案