我需要将List(Of Tuple(Of String, Integer))
分隔为两个List's(Of String)
。如果String
匹配某个函数ValidateFormat
(返回Boolean
),那么我需要在" match
"列表,如果没有 - 在" notMatch
"列表。
我可以使用Where
扩展方法两次获得两个List(of Tuple,Integer):
Dim initial As List(Of Tuple(Of String, Integer))
'...initial List filled..'
Dim match As List(Of Tuple(Of String, Integer)) = _
initial.Where(Function(x) ValidateFormat(x.Item1)).ToList
Dim notMatch As List(Of Tuple(Of String, Integer)) = _
initial.Where(Function(x) Not ValidateFormat(x.Item1)).ToList
但我只需要String
的列表,而不是Tuple
。有没有有效的方法来做到这一点?感谢。
答案 0 :(得分:2)
我使用类似的东西:
var lookups = initial.ToLookup(x => ValidateFormat(x.Item1), x => x.Item2);
var match = lookups[true].ToList();
var notMatch = lookups[false].ToList();
检查每个项目一次,将集合分成"匹配"或"不匹配" - 和ToLookup
的第二个参数说明如何将每个原始元素转换为查找特定键的值(在这种情况下为真/假)。
你当然可以使用Where
和Select
- 这对我来说感觉更干净。