2016-01-27 186 views
1

我有两个列表。虽然不是通常的。计算另一个列表中一个列表中元素的出现

第一:

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库。 我真正想要的是计算在secondList整个中出现的string元素有多少次,并将所有这些计数存储在第三个列表中。像这样的:

List<int> occurrences = new List<int>(); 

这是一个例子,如何将这个名单的样子,每个索引的firstList指数相匹配:

[0] 1 //because both "cy" and "gr" are contained in 1 secondList sublist(s) 
[1] 2 //because both "cy" and "ja" are contained in 2 secondList sublist(s) 
[2] 1 //et cetera.. 
[3] 3 
[4] 1 
[5] 2 
[6] 1 
[7] 2 
[8] 2 
[9] 3 
[10] 4 
[11] 2 
[12] 2 
[13] 2 
[14] 3 

^如果我做了错误不算那些,是我不好。

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

回答

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

请注意,这不是一个很好的解决办法,如果这些名单是大,你关心性能。在那种情况下,我会考虑选择更合适的数据结构。

+0

坦率地说,我只关心它是否会给出结果,而您的解决方案确实如我所愿。你有我最深切的感激之情! – goliatpiotr

+0

@goliatpiotr:太好了!那么你能接受我的答案吗? – Tim

+0

对不起,即时通讯这个堆栈溢出的东西。我认为现在接受了。保重! – goliatpiotr

相关问题