정수 컬렉션 항목이 포함 된 모음이 있습니다. 내가하고 싶은 일은 최상위 레벨 목록에서 다른 항목의 확장 된 하위 집합 인 항목을 제거하는 것입니다.Linq 목록 부분 집합 제거
은 예로서 다음의 목록 참조 :
항목 1 : 42, 40, 38, 32, 50, 28, 30, 51, 1
항목 2 : 42, 38, 32, 50, 28 , 30, 51, 1 개
항목 3 : 42, 50, 28, 30, 51, 1
항목 4 : I 코드를 실행할 때, 42, 51, 1
항목 4를 제외한 모든 항목에서 제거되어야 항목 4의 확장이 있기 때문에 목록.
아래 코드는 작동하며 작업 corr 나는 예상보다 조금 더 오래 걸리고있다. 컬렉션에 많은 항목이 있습니다.
Linq 또는 Collections.Set을 사용하여 동일한 결과를 더 빠르게 얻을 수 있습니까? 현재 사용
코드 :
Public Sub RemoveExtended()
If Me.Count < 1 Then Exit Sub
Dim endTime As DateTime
Dim start As DateTime
Debug.Print("Processing:" & Me.Count - 1.ToString)
start = Now
For shortestIndex As Integer = 0 To Me.Count - 1
For index As Integer = Me.Count - 1 To shortestIndex + 1 Step -1
If ContainsAll(Me(shortestIndex), Me(index)) Then
Me.RemoveAt(index)
End If
Next
Next
endTime = Now
Debug.Print("removing time:" & endTime.Subtract(start).ToString)
Debug.Print("result :" & Me.Count)
End Sub
Private Function ContainsAll(ByVal shortest As Generic.List(Of Integer), ByVal current As Generic.List(Of Integer)) As Boolean
'slower
'Return shortest.All(Function(x) current.Contains(x))
For Each Item As Integer In shortest
If Not current.Contains(Item) Then
Return False
End If
Next
Return True
End Function