2013-08-06 50 views
0

我需要另一双眼睛。我一直在玩弄这个LINQ语法扫描一个Hashtable有正规快件。似乎无法完全正确。我们的目标是所有密钥匹配正则表达式,然后使用这些结果的剩余值匹配到一个单独的正则表达式。在下面的测试案例中,我应该结束前三项。与Linq的哈希表匹配

Private ReadOnly Property Testhash As Hashtable 
    Get 
     Testhash = New Hashtable 
     Testhash.Add("a1a", "abc") 
     Testhash.Add("a2a", "aac") 
     Testhash.Add("a3a", "acc") 
     Testhash.Add("a4a", "ade") 
     Testhash.Add("a1b", "abc") 
     Testhash.Add("a2b", "aac") 
     Testhash.Add("a3b", "acc") 
     Testhash.Add("a4b", "ade") 
    End Get 
End Property 

Public Sub TestHashSearch() 

    Dim KeyPattern As System.Text.RegularExpressions.Regex = New System.Text.RegularExpressions.Regex("a.a") 
    Dim ValuePattern As System.Text.RegularExpressions.Regex = New System.Text.RegularExpressions.Regex("a.c") 

    Try 
     Dim queryMatchingPairs = (From item In Testhash 
            Let MatchedKeys = KeyPattern.Matches(item.key) 
            From key In MatchedKeys 
            Let MatchedValues = ValuePattern.Matches(key.value) 
            From val In MatchedValues 
            Select item).ToList.Distinct 

     Dim info = queryMatchingPairs 

    Catch ex As Exception 

    End Try 

End Sub 

回答

1

难道你不能同时匹配键和值吗?

Dim queryMatchingPairs = (From item In Testhash 
          Where KeyPattern.IsMatch(item.Key) And ValuePattern.IsMatch(item.Value) 
          Select item).ToList 
+1

肯定更优雅! – dgp

0

我应该早点休息一下,然后再多工作一次。正确的解决方案采用了独创的“从项”,而不是在第二个正规表达式较低的“从关键”。另外,对于散列表来说“不同”是不必要的。

  Dim queryMatchingPairs = (From item In Testhash 
             Let MatchedKeys = KeyPattern.Matches(item.key) 
             From key In MatchedKeys 
             Let MatchedValues = ValuePattern.Matches(item.value) 
             From val In MatchedValues 
             Select item).ToList