2013-10-11 4 views
6

У меня есть два массива говорятПопадая общие ценности в вопросе два массива с помощью LINQ

var list1 = string[] {"1", "2", "3", "4", "", ""}; 
var list2 = string[] {"2", "3", "4","",""}; 

Когда я пытаюсь получить общие элементы образуют эти два массива, используя следующий код

var listCommon = list1.Intersect(list2); 

Это дает мне результат нравится это

string[] {"2", "3", "4", ""} 

Но я хочу, он должен вернуться как этот

string[] {"2", "3", "4", "", ""} 

Это escaping last empty string Значение при пересечении.

+0

Почему бы вернулся 1? –

+0

«1» - не общий предмет – Morvader

+0

i hv отредактировал мой вопрос –

ответ

9

Установить методы, подобные Intersect или Except удалить дубликаты из каждой коллекции. Я предполагаю, что вы хотите что-то вроде этого:

var listCommon = list1.Where(list2.Contains); 

, который не так эффективен. Это может быть оптимизация:

var l2Lookup = new HashSet<string>(list2); 
var listCommon = list1.Where(l2Lookup.Contains); 
+0

Интересно. Я замечаю, что вы менее заинтересованы в закрытии/удалении вопросов, когда вы сгребаете в реферете, Тим ... –

+0

@DavidArno: Я понятия не имею, о чем вы говорите. Я не заметил повторного голосования до сих пор. Но даже если я получу нисходящий от вас ответ, потому что я отвечаю на вопрос, который вы проголосовали, чтобы закрыть? –

+0

Конечно, если второй список содержит только одну пустую строку, это все равно вернет две пустые строки, потому что первый список имеет два. Не уверен, что это именно то, чего хочет OP, но другой путь определенно будет более сложным. – juharr

5

Это будет работать:

list1.Where(x=>list2.Contains(x)) 
+0

Жаль, я слишком поздно) – Anarion

+0

Но ваш ответ лучше :) Я не мог понять, что такое meens "list1.Where (l2Lookup.Contains) "в верхнем ответе. Но ваш ответ дал понять. Спасибо @Anarion –

+0

@ Андрей Рыбалкин Помните, что решение в ответ Тима Шмельтера более эффективно, потому что быстрее искать в HashSet намного быстрее. – Anarion

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