VB.NET에서 해시 테이블을 가지고 있고 그 값에서 키의 문자열 값을 가져와야합니다. 예를 들어, 내가하는 경우 :VB.NET의 값에서 해시 테이블 키 이름을 가져 오는 방법은 무엇입니까?
hashtable.add("string1","string2")
"string2"가있는 경우 어떻게 값을 얻을 수 있습니까?
VB.NET에서 해시 테이블을 가지고 있고 그 값에서 키의 문자열 값을 가져와야합니다. 예를 들어, 내가하는 경우 :VB.NET의 값에서 해시 테이블 키 이름을 가져 오는 방법은 무엇입니까?
hashtable.add("string1","string2")
"string2"가있는 경우 어떻게 값을 얻을 수 있습니까?
(단순히 모든 값을 반복하지 않고) 할 수는 없습니다. 여러 키가 동일한 값으로 매핑 될 수 있다는 사실을 고려하십시오.
hashtable.Add("string1", "string2")
hashtable.Add("string3", "string2")
이제 "string2"가 반환 될 것으로 예상됩니까?
정말로 "역방향"조회가 필요한 경우 가장 간단한 해결책은 두 개의 개의 해시 테이블, 즉 "순방향"조회와 "역방향"조회를위한 해시 테이블 일 것입니다.
딘/코드 카 (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
그럼 단 한가지 방법일까요? 이 일을 할 수 VB.NET 구조가 있나요? 해시 테이블이 아마도 꽤 커질 것이므로 코드를 최소화하려고 노력 중입니다. – Steven
@ 스터븐 : 내가 아는 것은 아닙니다. 어쨌든 래퍼 클래스를 만들어 래퍼 클래스를 만들어서 컬렉션에 참조 만 저장하면되므로 추가 데이터의 양이 최소화 될 수 있으므로 두 가지 작업을 수행하는 것이 중요하지 않습니다. –
도움을 주셔서 감사합니다! 나는 2를 사용할 것 같다. 감사합니다. – Steven