2016-04-26 42 views
0

我有一個字典 - 列車(火車,列表(站)的) ... 站是具有兩個屬性布爾(station.src和station.dst)迭代通過字典,直到兩種條件

我想重複詞典中循環,直到字典中的每一站都有這個兩個屬性等於真正

Do 
     li = New List(Of train)(trains.Keys) 
     For Each train In li 
      Dim s = trains(train).Item(1) 
      If s.name = sorc Then 
       s.src = True 
       s.dst = True 
       GoTo n1 
      End If 
      lo = New List(Of train)(trains.Keys) 
      For Each tr As train In lo 
       If s.name_t = trains(tr).Item(2).name_t Then 
        s.src = True 
        trains(tr).Item(2).dst = True 
        GoTo n1 
       End If 
      Next 
      trains.Remove(train) 
n1:   Next train 
     Loop Until (((each station.src in trains is true and each station.dst in trains is true)))) 
+0

你可以給我看看'train'和'station'的類定義嗎? – Enigmativity

回答

0

我有點什麼你的代碼是做丟失。我曾希望能夠稍微簡化它。如果你能解釋它背後的邏輯,那將是非常好的。

儘管如此,簡單的解決問題的方法是這樣的:

Loop Until trains.SelectMany(Function (kvp) kvp.Value).All(Function (s) s.src And s.dst) 

我很想知道這個代碼的接近程度給你結果你想:

Dim sorcs = _ 
    From kvp In trains 
    Where kvp.Value.Item(1).name = sorc 
    Select New With { .s1 = kvp.Value.Item(1), .s2 = kvp.Value.Item(2) } 

Dim pairs = _ 
    From kvp1 In trains 
    Join kvp2 In trains On kvp1.Value.Item(1).name_t Equals kvp2.Value.Item(2).name_t 
    Select New With { .s1 = kvp1.Value.Item(1), .s2 = kvp1.Value.Item(2) } 

For Each pair In sorcs.Concat(pairs) 
    pair.s1.src = True 
    pair.s2.dst = True 
Next 
+0

我的字典是鐵路時刻表..每列火車都有兩個站的列表,第一個作爲源,第二個作爲目的地 我想遍歷字典,直到每個站(除了站用戶選擇它作爲源他的旅程)也作爲一個來源和目的地 ,因爲如果它不作爲任何火車的目的地,這意味着它無法到達 – AlKobtan

+0

因此,你試圖找出哪些站點可以從起始站到達?你能不能展示班級定義? – Enigmativity

+0

沒有試圖找出哪些站點不可達刪除它 類站 公共名稱作爲字符串 公共T作爲整數 公共name_t的String =名字&T 公共SRC由於布爾=假 公共DST由於布爾= false Public y As Integer End Class – AlKobtan