2013-08-01 3 views
3

누군가가 (VB.NET에서) 사전에있는 키의 일부만 검색하는 방법을 알려주시겠습니까? 난 단지 내가이 부분에서 검색 할 수있는 방법 "볼로냐"같은 키 또는 "볼로"와 같은 단어의 단지 부분의 일부를 알고 있다면사전 키의 일부를 검색하는 방법은 무엇입니까?

Dim PriceList As New Dictionary(Of String, Double)(System.StringComparer.OrdinalIgnoreCase) 

    PriceList.Add("Spaghetti alla carbonara", 21.65) 
    PriceList.Add("Spaghetti aglio e olio", 22.65) 
    PriceList.Add("Spaghetti alla napoletana", 23.65) 
    PriceList.Add("Spaghetti alla puttanesca ", 24.65) 
    PriceList.Add("Spaghetti alla gricia ", 25.65) 
    PriceList.Add("Spaghetti alle vongole", 26.65) 
    PriceList.Add("Spaghetti Bolognese", 27.65) 

    If PriceList.ContainsKey("spaghetti bolognese") Then 
     Dim price As Double = PriceList.Item("spaghetti bolognese") 
     Console.WriteLine("Found, price: " & price) 
    End If 

    If Not PriceList.ContainsKey("Bolognese") Then 
     Console.WriteLine("How can I search for only a part of a key?") 
    End If 

:

나는 다음과 같은 예제 코드를 사용 완전한 열쇠?

답변

7

"로네"를 포함하는 키 키 "볼로냐"만을 포함하여 사전의 일부를 얻으려면 Any()

If Not PriceList.Where(Function(x) x.Key.Contains("Bolognese")).Any() 
    Console.WriteLine("No Bolognese, sorry") 
End If 

를 사용하는 항목이 있다면 당신은 확인할 수 있습니다

Dim subsetOfDictionary = PriceList _ 
     .Where(Function(x) x.Key.Contains("Bolognese")) _ 
     .ToDictionary(Function(x) x.Key, Function(x) x.Value) 

로를 "Bolognese"가 포함 된 모든 항목의 가격 목록을 얻으십시오 :

Dim pricesForAllThingsBolognese = PriceList _ 
     .Where(Function(x) x.Key.Contains("Bolognese")) _ 
     .Select(Function(x) x.Value) _ 
     .ToList() 
+0

고맙습니다 매우 m uch! 그리고 "볼로냐"에 대한 가치 (이 경우에는 가격)를 어떻게 얻을 수 있습니까? – PeterCo

+0

@PeterCo 업데이트 된 답변보기 –

+0

다시 한번 감사드립니다! 세 번째 예제는 완벽하게 작동합니다! 두 번째 예제는 접근 가능한 'ToDictionary'가이 개수의 인수를 허용하지 않기 때문에 _Overload resolution 실패한 것과 같은 것을 제공합니다 _. _ .ToDictionary (기능 나는 그것이 (문자열의 문자열, KeyValuePair (더블)) 사전 = 가격표으로 subsetOfDictionary을 어둡게하는 변경하면 _ 어디에요 ((x)를 x.Key.Contains ("로네") 기능() x) x.Key) 잘 작동합니다. – PeterCo

관련 문제