값으로 사전 키 가져오기
C#에서 값별로 Dictionary 키를 얻으려면 어떻게 하나요?
Dictionary<string, string> types = new Dictionary<string, string>()
{
{"1", "one"},
{"2", "two"},
{"3", "three"}
};
다음과 같은 것을 원합니다:
getByValueKey(string value);
getByValueKey("one")
는 `"1"'을 반환해야 합니다.
이 작업을 수행하는 가장 좋은 방법은 무엇인가요? 해시 테이블, 정렬 목록은 어떨까요?
334
8
값이 반드시 고유할 필요는 없으므로 조회를 수행해야 합니다. 다음과 같은 작업을 수행할 수 있습니다:
값이 고유하고 읽기보다 삽입 빈도가 적은 경우 값이 키이고 키가 값인 역 사전을 만듭니다.
그렇게 할 수 있습니다:
KeyValuePair
,TKey, TValue
를 반복합니다(딕셔너리에 항목이 많은 경우 성능이 크게 저하될 수 있음).성능이 중요하지 않은 경우 방법 1을 사용하고, 메모리가 중요하지 않은 경우 방법 2를 사용합니다.
또한 모든 키는 고유해야 하지만 값은 반드시 고유할 필요는 없습니다. 지정된 값을 가진 키가 두 개 이상 있을 수 있습니다.
키-값 관계를 바꿀 수 없는 이유가 있나요?
난 롬폭 상황을 확장하십시오 람다 (λ) 는 linq 바인딩하면 사용할 수 없고 직접 했다. 이 사고로 인해 있는 단순한 기능:
"'c # 공용 정적 T, T, W> KeyByValue<, (이 Dictionary<, T, W>. 딕트, W val) { T 키 = 기본. 포리치 (KeyValuePair<, T, W>. 페어당 딕트 에서) { if (EqualityComparer< W> 이데포t. 퀄스 (파르지팔루, val);;) { 키 = 페어당. 키. 브레이크. } } 주요 반품하십시오. } "'
Call it like 다음과 같습니다.
Net 2.0 및 기타 제한된 환경 작동합니다.
내가 만든 이중 조회 클래스:
아마 이 같은 일이.
해당 객체의 목록을 발 주스토리스트 () 는 사전 값을 붙여넣습니다. IndexOf (" one";) 검색을 통해 새로운 목록을 찾는 one" "; 및 되돌려줍니다 되는 주요 / 가치 있는 인덱스화할 일치시킵니다 색인입니다 페어당 사전이므로
이 방법은 사전 키 값을 색인입니다 되돌려줍니다 높여줍니까 아랑곳하지 않고, 단지 당신이 찾고 있다.
염두에 둘 이상의 " one", 있을 수 있습니다. 자신의 가치를 사전이므로 그 때문에, key" " 얻을 수 없다. 메서드입니다.
아래 코드를 포함할 경우 고유 값 데이터 때만
아주 간단한 방법이 있습니다. 저에게는 완벽하게 작동했습니다.