用于合并多个列表的通用函数

时间:2013-11-09 19:37:43

标签: c# .net vb.net winforms list

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

我见过列表类型的Join方法,但我不知道如何使用它,我也不知道它是否可以一次加入多个列表(这就是我要求通用的原因)函数如果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

1 个答案:

答案 0 :(得分:1)

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

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

修改

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

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

return lists.SelectMany(i => i).Distinct().ToList;