Как логически и (^, логическое соединение) списки строк - C # - PullRequest
1 голос
/ 23 февраля 2012

Хорошо. Теперь этот вопрос может показаться вам странным, но я должен его решить. Теперь вопрос прост. Позвольте мне объяснить с хорошим примером

Допустим, у меня есть следующие списки строк. Каждая строка представляет собой список, и эти списки будут логически добавлены enter image description here

my,car,fly,surf,buy
house,home,car,fly,buy
fly,king,rock,buy,sell
fly,buy,home,rock,sell

Хорошо, если вы логически и в приведенных выше списках результат будет

fly,buy

Потому что эти 2 являются единственными одинаковыми элементами в этих списках. Теперь, как я могу достичь этого самого быстрого способа выполнения с C # 4.0? Спасибо

c #, c # -4.0

Ответы [ 3 ]

6 голосов
/ 23 февраля 2012

Вы можете использовать метод Пересечение , данный LINQ.Например:

List<string> a = new List<string>() {"my","car","fly","surf","buy"};
List<string> b = new List<string>() {"house","home","car","fly","buy" };

var c = a.Intersect(b);

Дает машину, летит и покупает.Повторите пересечение на c для остальных строк, чтобы получить полное пересечение.

1 голос
/ 23 февраля 2012

Вы можете использовать HashSet<T>:

IEnumerable<T> IntersectAll(IEnumerable<T> lists)
{
    var set = new HashSet<T>(lists.First());

    foreach (var other in lists.Skip(1))
    {
        set.IntersectWith(other);
    }

    return set;
}
1 голос
/ 23 февраля 2012
List<List<string>> lists = //whatever
HashSet<string> set = new HashSet<string>(lists[0]);

for(int i = 1; i < lists.Count; i++)
{
    set.IntersectWith(lists[i]);
}

Используя linq, вы можете использовать:

var intersection = lists.Aggregate((l1, l2) => l1.Intersect(l2).ToList());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...