2016-04-26 1 views
0

У меня есть словарь - поезд (поездные, список (станция)) ... станции класс, который имеет два свойства, как Boolean (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

мой словарь - это расписание движения по железной дороге .. у каждого поезда есть список из двух станций: первый в качестве источника, а второй - как конечный пункт Я хочу перебирать словарь до каждой станции (кроме станции sorc, чтобы пользователь выбирал ее как источник для его поездка) действует как источник и пункт назначения , потому что, если он не действует в качестве пункта назначения для любого поезда, что означает, что он недоступен – AlKobtan

+0

Итак, вы пытаетесь выяснить, какие станции достижимы с начальной станции? Можете ли вы показать определения классов, пожалуйста? – Enigmativity

+0

не пытается выяснить, какие станции не доступны, чтобы удалить его Класса станции Общественного имя As String Public т As Integer Public name_t As String = имя и т Public ЦСИ As Boolean = False Public целевой_адреса As Boolean = false Public y As Integer End Class – AlKobtan

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