首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >遍历字典,直到有两个条件

遍历字典,直到有两个条件
EN

Stack Overflow用户
提问于 2016-04-26 09:08:24
回答 1查看 45关注 0票数 0

我有一本火车字典(火车、车站)。station是一个具有两个布尔型属性(station.src和station.dst)的类

我想在字典上重复循环,直到字典中的每个站点都有这两个属性等于true

代码语言:javascript
复制
    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))))
EN

回答 1

Stack Overflow用户

发布于 2016-04-26 09:23:45

我对你的代码所做的事情有点迷惑。我曾希望能够在一定程度上简化它。如果你能解释一下背后的逻辑,那就太好了。

然而,您的问题的简单解决方案是:

代码语言:javascript
复制
Loop Until trains.SelectMany(Function (kvp) kvp.Value).All(Function (s) s.src And s.dst)

我很想知道这段代码离你想要的结果有多近:

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36853679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档