在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
答案 0 :(得分:1)
我假设您不希望在SQL连接的意义上进行连接,而是创建一个新的序列,其中包含来自任一列表的所有元素,但没有重复。这可以用linq(C#语法)完成:
return list1.Concat(list2).Distinct();
如果源是集合的集合,SelectMany
可用于将其展平为一个序列:
在C#语法中,JoinList
函数将包含:
return lists.SelectMany(i => i).Distinct().ToList;