0

在 C# 或 VBNET 中,我如何编写一个通用函数来将两个(或更多)列表连接到一个新的唯一列表中?

我见过列表类型的 Join 方法,但我不知道如何使用它,也不知道它是否可以一次加入多个列表(这就是为什么我要求一个通用函数 if Join方法不能完成这项工作)。

像这样的东西:

private function JoinLists(of T)(byval Lists() as list(of T)) as list(of T)

    dim newlist as new list(of T)

    ' some LINQ method or a For + list.Join()...

    return joinedlists

end function

更新:

我正在尝试使用 Anders Abel 的建议,但这不起作用:

Private Function JoinLists(Of T)(ByVal Lists() As List(Of T)) As List(Of T)

    Dim newlist As New list(Of T)

    For Each l As List(Of T) In Lists
        newlist.Concat(l)
    Next

    Return newlist

End Function

    Dim a As New List(Of String) From {"a", "b"}
    Dim b As New List(Of String) From {"f", "d"}

    Dim newlist As List(Of String) = JoinLists(Of String)({a, b})

    MsgBox(newlist.Count) ' Result: 0  Expected: 3

    For Each item In newlist
        MsgBox(item) ' Any item is shown
        'expected:
        'a
        'b
        'f
        'd
    Next
4

1 回答 1

1

我假设您不想在 SQL 连接的意义上进行连接,而是创建一个新序列,其中包含任一列表中的所有元素,但没有重复项。这可以通过 linq(C# 语法)来完成:

return list1.Concat(list2).Distinct();

编辑

如果源是集合的集合,SelectMany可用于将其展平为一个序列:

在 C# 语法中,该JoinList函数将包含:

return lists.SelectMany(i => i).Distinct().ToList;
于 2013-11-09T19:40:43.173 回答