代码之家  ›  专栏  ›  技术社区  ›  Ross Presser

返回集合集合的语法是什么?

  •  0
  • Ross Presser  · 技术社区  · 6 年前

    下面的代码显示了我如何尝试返回对象集合的集合。使用基于lambda的LINQ语法,我得到了我想要的。使用“自然语言”语法,我不;我得到一个扁平的物体集合。收集一批藏品的用词是什么?

    Option Strict On
    
    Sub Main
    
        Dim i As Integer
        Dim j As Integer
        Dim l As List(Of List(Of MyPoint)) = New List(Of List(Of MyPoint))
        For j = 1 To 2
            Dim ll = New List(Of MyPoint)
            For i = 1 To 10
                ll.Add(New MyPoint(i,j))
            Next
            l.Add(ll)
        Next
    
        Dim q1 = l.Select(Function (ll) ll.Select(Function (p) New MyPoint(p.x+1, p.y+1)))
    
        Dim q2 = From ll In l From p In ll Select New MyPoint(p.x + 1, p.y + 1)
    
    
    
    End Sub
    
    Public Class MyPoint
        Public Property X As Integer
        Public Property Y As Integer
        Sub New(i As Integer, j As Integer)
            X = i
            Y = j
        End Sub
    End Class
    

    编辑:使用实类而不是匿名类型,选项严格,所以你可以专注于实际问题,而不是与我争论。

    1 回复  |  直到 6 年前
        1
  •  2
  •   James Curran    6 年前

    你有两个 Select 在第一个里面。你需要两个 在第二个中也是; (我重新命名了一些东西,这样更容易阅读)

    Dim i As Integer, j As Integer
    Dim listOfLists As List(Of List(Of Point)) = New List(Of List(Of Point))
    For j = 1 To 2
        Dim ll = New List(Of Point)
        For i = 1 To 10
            ll.Add(New Point With {.x = i, .y = j})
        Next
        listOfLists.Add(ll)
    Next
    
    ' This returns what I want    
    Dim q1 = listOfLists.Select(Function(ll) ll.Select(Function(p) New With {.x = p.x + 1, .y = p.y + 1}))
    
    Dim q2 = From thisList In listOfLists 
              Select From pnt In thisList 
                     Select New Point With {.x = pnt.x + 1, .y = pnt.y + 1}