2016-07-10 5 views
1

これは知っている/知っている便利なものかもしれないと思った。2つのList(s)/ Collectionsを持つforループを実行します。 Visual Basic

私はクラス内に2つの別々のリストを持っています。 2つのリストを使ってFor/Nextループを実行する簡単な方法がありますが、この例では2つの別々のForが必要ですか?

IE:

Public Structure Location 
    Public Name As String 
    Public ID As Integer 
    Public IsSub As Boolean 
End Structure 

Public Shared MainLocationList As List(Of Location) 
Public Shared SubLocationsList As List(Of Location) 

Public Shared Function Get_Location_By_ID(id As Integer) As Location 

    For Each location As Location In MainLocationList And SubLocationsList 
     If location.id = id then 
      Return location 
     End If 
    Next 

End Function 

私はリストに私が検索できることを実現する、しかしImはまた、2つのコントロールの二つの異なるタイプのリスト、またはコレクションなど

答えて

0
を言うために適用可能なように尋ねます

あなたはLINQを持つ2つのリストを連結して、反復することができます。これは、すべての目をループを順次ます

For Each location As Location In MainLocationList.Concat(SubLocationsList) 
    If location.id = id then 
     Return location 
    End If 
Next 

e要素を最初のリストに、次に2番目の要素に追加します。

これを書くために別の少ない冗長方法は次のとおりです。これに似

return MainLocationList.Concat(SubLocationsList).FirstOrDefault(Function(location) location.id = id) 
+0

大変感謝しています。 – Josh

1

何かがあまりにも仕事ができる:

Dim x As Integer = 0 
    Do Until x > MainLocationList.Count - 1 Or x > SubLocationsList.Count - 1 
     If MainLocationList(x) = id And SubLocationsList(x) = id Then Return MainLocationList(x) 
     x += 1 
    Loop 
    Return Nothing 'None Found 

私は、あなたが探しているかわからないので、それはいくつかの調整が必要な場合がありますあなたの例によると私に似ているのは、各リストの同じIDを探していることです。(この例では、同じIDのリスト項目が、各liの同じインデックス順で返されますst。)しかし、これは同じループ内で両方のリストをチェックする方法のもう1つの例です。整数でカウントアップし、整数を使用して各インスタンスを各リストのインデックス番号でチェックします。あなたに役立つことを願っています。

関連する問題