2017-01-24 3 views
0

Извините, если это дублированный вопрос, но подобные вопросы по извлечению значений ключей пары двойного значения недостаточно для меня, чтобы понять, как его использовать.Получение дубликатов значений из списка <string> внутри словаря

В настоящее время я использую словарь списков, содержащих текст и использующий lists.Intersect, чтобы сравнивать списки друг с другом. Как я могу получить ключевое значение, из которого два списка имеют дубликаты внутри них? Вот мой код:

private string findDuplicates(Dictionary<int, List<string>> lists) 
{ 
    List<string> intersection = new List<string>(); 
    int i; 
    int j; 
    for (i = 0; i < 13; i++) 
    { 
     for (j = i + 1; j < 13; j++) 
     { 
      intersection.Add(String.Join(" ", lists[i].Intersect(lists[j])).ToString()); 

     }; 
     //Attempt to retrieve value 
     if (intersection.Count > 0) 
     { 
      numberOfDomainsTB.Text += "\nLocations:\nList " + i + " and List " + j; 
     } 
    }; 

Другие методы, которые я вижу, чтобы сделать это для обычных словарей:

lists.GroupBy(x => x.Value).Where(x => x.Count() > 1); 

Но это не сравнить внутренние значения в списках.

Спасибо.

+0

Google есть, сначала осмотритесь. – roottraveller

+0

Почему именно «списки» являются словарями? Вы используете его как массив или List <>. –

+0

Ваш '// Попытка ....' находится внутри внешнего for-loop, намеренно? –

ответ

1
private string findDuplicates(Dictionary<int, List<string>> lists) 
{ 
    List<string> intersection = new List<string>(); 
    int i; 
    int j; 
    string compare = ""; 
    for (i = 0; i < lists.Count - 1; i++) 
    { 
     for (j = i + 1; j < lists.Count - 1; j++) 
     { 
      compare = String.Join(" ", lists[i].Intersect(lists[j])).ToString(); 
      if (!String.IsNullOrEmpty(compare)) 
      { 
       intersection.Add(String.Join(" ", lists[i].Intersect(lists[j])).ToString()); 

      } 
     }; 

    }; 
} 

Я установил это, понимая, что intersection.Add всегда будет добавить новое значение в список, независимо от того, является ли он пустым или нет. Таким образом, любое сделанное сравнение всегда показывает совпадения с каждым списком. Поэтому я решил сделать Intersect дважды: один раз для сохранения в строке, которая затем проверяется, если null/empty, а если нет, то снова в строке intersection.Add, чтобы фактически добавить пересекающиеся значения.

ПРИМЕЧАНИЕ: Мне не нужно было использовать словарь в конце. Это просто остаток предыдущей попытки выполнить эту задачу. Любой обычный список будет работать.

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