计算另一个列表中一个列表中元素的出现次数

时间:2016-01-27 23:28:35

标签: c# linq combinations combinatorics

我有两个清单。虽然不是常见的。

首先:

Combinations<string> someCombination = new Combinations<string>(someOtherList, 2);
var firstList = someCombination.ToList();  

它返回:

 [0] { cy gr }
 [1] { cy ja }
 [2] { cy ka }
 [3] { cy wo }
 [4] { cy zo }
 [5] { gr ja }
 [6] { gr ka }
 [7] { gr wo }
 [8] { gr zo }
 [9] { ja ka }
[10] { ja wo }
[11] { ja zo }
[12] { ka wo }
[13] { ka zo }
[14] { wo zo }

第二

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

它返回:

 [0] { gr ch wo zo }
 [1] { zo cy gr ma }
 [2] { wo po ja cy }
 [3] { ja ka po gr }
 [4] { zo ka ja og }
 [5] { cy ja zo wo }
 [6] { gr og po ma }
 [7] { wo zo ka cy }
 [8] { gr og wo ja }
 [9] { ja ka ch wo }

如您所见,我正在使用Combinatorics.Collections库。 我真正想要的是计算整个stringfirstList的{​​{1}}个元素出现的次数,并将所有这些计数存储在第三个列表中。像这样:

secondList

这是一个示例,该列表如何显示,每个索引都匹配List<int> occurrences = new List<int>(); 索引:

firstList

^如果我错误地计算了那些,我的坏。

我认为LINQ可能会在这里派上用场,但我完全没有希望了。如果我错了,请纠正我。我真的很感激这里的帮助。

1 个答案:

答案 0 :(得分:-1)

  var occurrences = firstList.Select(l => secondList.Count(ss => l.All(ss.Contains))).ToList();

请注意,如果这些列表很大并且您关心性能,这不是一个好的解决方案。在这种情况下,我会考虑选择更合适的数据结构。