2017-02-15 2 views
0

У меня есть объект, который содержит несколько списков.Сравнение двух списков объектов со списками строк и без перекрытия

Public Class aObject 
    Public Property title 
    Public Property aList As List(Of String) 
    Public Property bList As List(Of String) 
    Public Property cList As List(Of String) 
    Public Property dList As List(Of String) 
End Class 

У меня есть другой объект, где хранятся все объекты aObjects.

Public Class bObject 
Private _LocalCollection As List(Of aObject) 
Private _RemoteCollection As List(Of aObject) 
End Class 

Каждый список в объекте aObject - это другая настройка. Если я добавлю новый параметр, я хочу быть уверенным, что все комбинации никогда не пересекаются. Итак, если я сохранял буквы в списке aList и числах в bList и имел объект с {1,6,7} и {a, d, z}, я бы не захотел добавить еще одну настройку со списками {2,6,8 } и {a, f, g}. Однако я хотел бы добавить списки {1,6,7} и {b, c, f}. Все четыре списка аналогичны. Мне нужно проверить комбинацию из четырех. Я могу использовать рекурсивный алгоритм и проверять все значения, но мне было интересно, есть ли другой способ.

Я использовал следующий предложенный ответ и реализовал его:

Public Function checkDuplicates(ByVal strChampions As List(Of String), ByVal strSummonerSpells As List(Of String), ByVal strModes As List(Of String), ByVal strMaps As List(Of String)) As Boolean 
    Dim booDuplicates As Boolean = False 
    For Each setting In _LocalSettings 
     Dim l1 = setting.champions.Intersect(strChampions) 
     If l1.Count() > 0 Then 
      Dim l2 = setting.summonerspells.Intersect(strSummonerSpells) 
      If l2.Count() > 0 Then 
       Dim l3 = setting.modes.Intersect(strModes) 
       If l3.Count() > 0 Then 
        Dim l4 = setting.maps.Intersect(strMaps) 
        If l4.Count() > 0 Then 
         booDuplicates = booDuplicates Or True 
' I am going to create the duplicate settings here to know where to overwrite. 
        End If 
       End If 
      End If 
     End If 
    Next 
    Return booDuplicates 
End Function 

ответ

1

Что делать, если вы проверить пересечение списков, чтобы увидеть, если есть общие элементы?

https://msdn.microsoft.com/en-us/library/bb460136(v=vs.110).aspx

Пересечение двух множеств A и B определяется как набор, который содержит все элементы А, также появляются в B, но никаких других элементов.

Sub Main() 
    Dim a As New List(Of String) From {"1", "6", "7"} 
    Dim b As New List(Of String) From {"a", "d", "z"} 
    Dim c As New List(Of String) From {"2", "6", "8"} 

    Console.WriteLine(String.Format("a intersects b: {0}", a.Intersect(b).Count > 0)) 
    Console.WriteLine(String.Format("a intersects c: {0}", a.Intersect(c).Count > 0)) 
    Console.WriteLine(String.Format("b intersects c: {0}", b.Intersect(c).Count > 0)) 

    Console.ReadLine() 
End Sub 

Выходы:

a intersects b: False 
a intersects c: True 
b intersects c: False 
+0

Звуки большой. Я должен повторять все объекты, но я понял, что на самом деле важно то, что пересекается. Таким образом, я могу перезаписать или нет. Теперь мне просто нужно выяснить, как перезаписать объекты. Спасибо. –

+0

Я могу показать свой код для дальнейшего использования. –

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