2016-01-27 6 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. Я действительно хочу, чтобы подсчитать, сколько раз и string элементов из firstList происходит в целом secondList и сохраняет все эти цифры в третьем списке. Как это:

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

Смежные вопросы