2010-07-20 7 views

답변

2

(단순히 모든 값을 반복하지 않고) 할 수는 없습니다. 여러 키가 동일한 값으로 매핑 될 수 있다는 사실을 고려하십시오.

hashtable.Add("string1", "string2") 
hashtable.Add("string3", "string2") 

이제 "string2"가 반환 될 것으로 예상됩니까?

정말로 "역방향"조회가 필요한 경우 가장 간단한 해결책은 두 개의 개의 해시 테이블, 즉 "순방향"조회와 "역방향"조회를위한 해시 테이블 일 것입니다.

+0

그럼 단 한가지 방법일까요? 이 일을 할 수 VB.NET 구조가 있나요? 해시 테이블이 아마도 꽤 커질 것이므로 코드를 최소화하려고 노력 중입니다. – Steven

+0

@ 스터븐 : 내가 아는 것은 아닙니다. 어쨌든 래퍼 클래스를 만들어 래퍼 클래스를 만들어서 컬렉션에 참조 만 저장하면되므로 추가 데이터의 양이 최소화 될 수 있으므로 두 가지 작업을 수행하는 것이 중요하지 않습니다. –

+0

도움을 주셔서 감사합니다! 나는 2를 사용할 것 같다. 감사합니다. – Steven

0

딘/코드 카 (Dean/codeka)는 엄격하게 말할 수는 없다고 말합니다.

같은 (지정되지 않은) 순서는 Keys 해시 테이블의 Values으로 같은 것을 할 수 있습니다하지만 다음과 같습니다 그러나

Hashtable ht = new Hashtable(); 
ht.Add("string1", "str2"); 
ht.Add("string2", "str2"); 

List<string> keys = new List<string>(ht.Keys.OfType<string>()); 

string key = ht.Values.OfType<string>() 
    .Select((htI, i) => new { Key = keys[i], Value = htI }) 
    .Where(htKVP => htKVP.Value == "str2") 
    .Select(htKVP => htKVP.Key) 
    .FirstOrDefault(); 

, 당신은 더 나은이 일반적으로 입력되는 이유만으로 Dictionary<string, string>를 사용하는 것 Linq에 쉽게 접근 할 수있게 해줍니다.

Dim ht as new Hashtable() 
ht.Add("string1", "str2") 
ht.Add("string2", "str2") 

Dim keys as new List(Of String)(ht.Keys.OfType(Of String)()) 

Dim key as String = ht.Values.OfType(Of String)() _ 
    .Select(Function(htI, i) New With { .Key = keys(i), .Value = htI }) _ 
    .Where(Function(htKVP) htKVP.Value = "str2") _ 
    .Select(Function(htKVP) htKVP.Key) _ 
    .FirstOrDefault() 

그러나 다시 나는으로 시작 했죠 :

은 VB.NET에 대한 변환됩니다

Dim dt as New Dictionary(Of String, String) 

당신과 같이 확장 방법으로이 문제를 추가 할 수 있습니다

Imports System.Runtime.CompilerServices 

Module StringExtensions 

    <Extension()> 
    Public Function FirstKeyForValue(ByVal Hashtable as ht, ByVal value As String) As String 
     return ht.Values.OfType(Of String)() _ 
     .Select(Function(htI, i) New With { .Key = keys(i), .Value = htI }) _ 
     .Where(Function(htKVP) htKVP.Value = "str2") _ 
     .Select(Function(htKVP) htKVP.Key) _ 
     .FirstOrDefault()   
    End Function 

End Module 
관련 문제