单独的List(Of Tuple(Of String,Integer))得到两个List(Of String)匹配/非谓词

时间:2014-10-30 17:54:24

标签: .net vb.net linq

我需要将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。有没有有效的方法来做到这一点?感谢。

1 个答案:

答案 0 :(得分:2)

我使用类似的东西:

var lookups = initial.ToLookup(x => ValidateFormat(x.Item1), x => x.Item2);
var match = lookups[true].ToList();
var notMatch = lookups[false].ToList();

检查每个项目一次,将集合分成"匹配"或"不匹配" - 和ToLookup的第二个参数说明如何将每个原始元素转换为查找特定键的值(在这种情况下为真/假)。

当然可以使用WhereSelect - 这对我来说感觉更干净。