Member 11403304 Ответов: 3

Как получить дубликаты значений из двух списков?


У меня есть программа vb, и я хотел бы использовать list one values и проверить наличие дубликатов из 2 списков.
Имя переменной для значений, которые я ищу в обоих списках, - это strCaseEventInternalID

Список первый strCaseEventInternalIDList имейте 3 значения 1810458047, 1810458073 и 1810458074.

Список два имеет 3 значения 1810458073, 1810458074 и 1810458074
Список два находится в этом объекте

objXmlResponseDoc2 = Msc.Integration.Mncis.Library.v4.Odyssey.QueryDB(strSql, "Justice", False, True)


Во втором списке есть дубликат (1810458074), который я и хочу найти.
Как мне это сделать?

Что я уже пробовал:

For Each strCaseEventInternalID In strCaseEventInternalIDList
    If (strCaseEventInternalIDList.Count() > 1) Then
	'Do something
    End If
Next

PIEBALDconsult

Поместите каждый список в хэш-набор и посмотрите на их объединение.

3 Ответов

Рейтинг:
16

Peter Vegter

Если вы хотите использовать "для каждого" (и вам все равно, есть ли дубликаты в самом list1 или list2):

For Each val1 As Integer In list1
    For Each val2 As Integer In list2
        If val1 = val2 Then
        ' found duplicate
        End If
    Next
Next

(Правка: добавлено "тогда" С "Если")


Member 11403304

Большое спасибо, Питер. Ваш код с некоторыми настройками работает. Ты сделал мой день!

Peter Vegter

Пожалуйста. Рад, что тебе понравилось!

Рейтинг:
1

Bryian Tan

Не ясно, если ваш вопрос просит найти дубликат в списке или между двумя списками. Во всяком случае, вот примеры того, как выполнить оба сценария

 Dim l1 = New List(Of Integer) From {1810458047, 1810458073, 1810458074}
 Dim l2 = New List(Of Integer) From {1810458073, 1810458074, 1810458074}

'find item that exists in l1 but not l2
 Dim l3 = l1.Except(l2).ToList()  ' result is {1810458047}
 
'find item in both List
 Dim l4 = l1.Intersect(l2).ToList()  ' result is {1810458073,1810458074}

'find duplicate in a List
 Dim duplicates1 = l1.Where(Function(x) l1.Where(Function(y) x = y).Count() > 1).Distinct() 'result is NOTHING
 Dim duplicates2 = l2.Where(Function(x) l2.Where(Function(y) x = y).Count() > 1).Distinct() 'result is 1810458074

 'find duplicates item in l2 that exists in l1
 Dim l5 = l2.Intersect(l1).Where(Function(x) l2.Where(Function(y) x = y).Count() > 1).Distinct().ToList() 'result 1810458074
'find duplicates item in l1 that exists in l2
Dim l6 = l1.Intersect(l1).Where(Function(x) l1.Where(Function(y) x = y).Count() > 1).Distinct().ToList() 'result is NOTHING

.net-как получить дубликаты элементов из списка в vb.net -переполнение стека[^]

vb.net -Сравните два списка и получите разницу - переполнение стека[^]


Member 11403304

Я пытаюсь найти, есть ли в списке два повторяющиеся значения из списка один

Bryian Tan

Тогда, как насчет чего-то вроде

Dim l5 = l2.Intersect(l1).Where(Function(x) l2.Where(Function(y) x = y).Count() > 1).Distinct().ToList()

Member 11403304

Так что же мне делать с каждым моим утверждением? Может быть, мой вопрос не совсем ясен? Список 1 имеет 3 элемента, а список 2 имеет 3 элемента, но 2 из трех являются дубликатами из списка один. т. е. 1810458074 из списка один появляется дважды в списке два. Как я могу использовать a для каждого оператора и If, чтобы получить это значение?

Bryian Tan

Вы можете использовать комбинацию for each и linq вместо циклического перебора каждого списка. Возможно, мне следует спросить, поддерживает ли ваше приложение запрос Linq, если нет, то вложенные циклы от другого члена должны выполнять эту работу.

Dim l1 = New List(Of Integer) From {1810458047, 1810458073, 1810458074}
        Dim l2 = New List(Of Integer) From {1810458073, 1810458074, 1810458074, 1810458074}

        For Each strCaseEventInternalID In l1
            If l2.FindAll(Function(f As Integer) f = strCaseEventInternalID).Count > 1 Then
                Console.WriteLine(strCaseEventInternalID & " is Duplicate")
            End If
        Next

Рейтинг:
1

Patrice T

Цитата:
Список два имеет 3 значения 1810458073, 1810458074 и 1810458074
Во втором списке есть дубликат (1810458074), который я и хочу найти.

Я понимаю это как поиск дубликатов в одном списке, так как список содержит 1810458074 2 раза.
Dim list1 = New List(Of Integer) From {1810458073, 1810458074, 1810458074}
For x = LBound(list1) to UBound(list1) - 1
  For y = x + 1 to UBound(list1)
    If list1(x) = list1(x) then
      ' found duplicate
    End If
  Next
Next