【问题标题】:vb.net For Each loopvb.net For Each 循环
【发布时间】:2010-07-24 18:33:04
【问题描述】:

我想使用 For each 循环遍历两个列表。

dim data as list(of pointpairlist)
For each recLine in records
    For Each chan In recLine.channels and d in data
      d.add( func(chan) )
    Next
next

注意:每个记录行都有一个来自每个记录通道的样本。即每条记录线是 32 个传感器记录的一部分。我想为每个通道建立一个 x,y 数据点列表(x 轴对所有通道都是通用的)

有没有类似于我上面的方法(避免索引变量)

【问题讨论】:

    标签: vb.net list for-loop


    【解决方案1】:

    在单个循环中迭代两个不同集合的最佳方法是使用索引器。

    For index As Integer = 0 To recLine.channels.Count - 1
        data(index) = func(chan(index))
    Next
    

    作为@0xA3 cmets,您还可以使用while 循环,在每个集合上直接调用GetEnumeratorMoveNextCurrent,但这对您没有任何好处。

    我知道您想避免使用索引器,但没有其他任何简单的语言支持。

    C# 也是如此。

    为什么需要避免使用索引器?

    【讨论】:

    • 好吧,如果您真的想避免使用索引器,您可以使用 while 循环并自己调用 GetEnumeratorMoveNextCurrent。如果列表的大小相同,这应该可以很好地工作,但它并没有真正给您带来优势。
    • 嗯,这是一个尝试减少混乱的混合体,并且知道我真的不太了解 vb.net 中的所有结构。我通常在 vb.net 中编写代码,就好像它是 C 或 C++,这可能不是该语言最有效的使用方式。
    【解决方案2】:

    嵌套循环。我无法对来自 sn-p 的实际声明进行逆向工程,但可以像这样:

        Dim data As List(Of PointPairList)
        ''...
        For Each point In data
            For Each chan In point.recLine
                func(chan)
            Next
        Next
    

    【讨论】:

    • 不太有效,因为每个“点”实际上是由每个通道填充的点列表(每个通道列表的点列表)。但我知道我意识到我遗漏了一些东西。我将编辑问题
    • 嗯,类似的。似乎您已经采用了嵌套循环方法。为什么选择了一个不用的答案?
    • 因为这就是我最终使用的! :)
    猜你喜欢
    • 1970-01-01
    • 2015-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-11
    • 1970-01-01
    • 2014-10-19
    相关资源
    最近更新 更多