인덱스로 OrderedDictionary에서 항목의 키와 값을 가져 오는 방법은 무엇입니까?C#의 OrderedDictionary에서 키를 가져 오는 방법은?
18
A
답변
10
이렇게하는 데 직접적인 방법은 없습니다. 이것은 OrderedDictionary
의 경우 인덱스 은입니다. 실제 키를 원한다면 직접 추적해야합니다. 아마도 가장 간단한 방법은 색인 컬렉션에 키를 복사하는 것입니다 :
// dict is OrderedDictionary
object[] keys = new object[dict.Keys.Count];
dict.Keys.CopyTo(keys, 0);
for(int i = 0; i < dict.Keys.Count; i++) {
Console.WriteLine(
"Index = {0}, Key = {1}, Value = {2}",
i,
keys[i],
dict[i]
);
}
당신은 OrderedDictionary
에 대한 액세스를 래핑하는 새로운 클래스로이 동작을 캡슐화 할 수있다.
35
1
앞에서 언급 한 코드를 사용하여 키와 값으로 색인을 생성하는 확장 메서드를 만들었습니다.
public static T GetKey<T>(this OrderedDictionary dictionary, int index)
{
if (dictionary == null)
{
return default(T);
}
try
{
return (T)dictionary.Cast<DictionaryEntry>().ElementAt(index).Key;
}
catch (Exception)
{
return default(T);
}
}
public static U GetValue<T, U>(this OrderedDictionary dictionary, T key)
{
if (dictionary == null)
{
return default(U);
}
try
{
return (U)dictionary.Cast<DictionaryEntry>().AsQueryable().Single(kvp => ((T)kvp.Key).Equals(key)).Value;
}
catch (Exception)
{
return default(U);
}
}
+0
목표 색인/키가 사전에 없으면 기본값을 반환하려는 것이지만 값 비싼 방법을 선택했습니다. 해. 예외는 if/else와 같은 일반적인 제어 흐름 구조와 비교할 때 매우 비쌉니다. 예외 상황에 의존하는 것보다 범위를 벗어나는 인덱스와 존재하지 않는 키를 직접 확인하는 것이 훨씬 낫습니다. – Odrade
관련 문제
- 1. SortedDictionary에서 이전 키를 가져 오는 방법은 무엇입니까?
- 2. 배열 객체의 키를 가져 오는 방법은 무엇입니까?
- 3. ContentValues에서 키를 가져 오는 방법은 무엇입니까?
- 4. ANSI C의 이더넷 카드에서 네트워크 패킷을 가져 오는 방법은 무엇입니까?
- 5. Objective-C의 UIView에서 각 키의 값을 가져 오는 방법은 무엇입니까?
- 6. 블랙 베리에 기존 키를 가져 오는 방법
- 7. C에서 사전의 키를 가져 오는 방법 #
- 8. VB6.0에서 컬렉션의 키를 가져 오는 방법
- 9. Groovy에서 외래 키를 사용하여 모델에서 값을 가져 오는 방법은 무엇입니까?
- 10. 중첩 해시가있는 여러 해시 키를 가져 오는 방법은 무엇입니까?
- 11. 토큰에서 사용자 세션 키를 가져 오는 방법은 무엇입니까?
- 12. iPhone 프로그램의 인증서에서 공개 키를 가져 오는 방법은 무엇입니까?
- 13. 레지스트리에서 모든 키와 하위 키를 가져 오는 방법은 무엇입니까?
- 14. 목표 C의 기본 String에서 문자열의 일부를 가져 오는 방법
- 15. 이메일을 가져 오는 방법은 무엇입니까?
- 16. PLActorKit을 가져 오는 방법은 무엇입니까?
- 17. BDB, 기본 키를 지정된 순서로 가져 오는 방법?
- 18. hbase 테이블에서 행 키를 가져 오는 동안 LIMIT를 적용하려면 어떻게해야합니까?
- 19. web.config appSettings 키를 가져 오는 NLog LayoutRender가 있습니까?
- 20. Windows에 이진 레지스트리 키를 가져 오는 중 문제가 발생했습니다.
- 21. 목표 C의 디렉토리 크기
- 22. 텍스트를 가져 오는 중입니까?
- 23. 파일을 가져 오는 방법
- 24. 중국에서 가져 오는 Git?
- 25. 현재 행에서 D 열의 값을 가져 오는 방법은 무엇입니까?
- 26. 기존 순서로 사전에서 모든 키의 배열을 가져 오는 방법은 무엇입니까?
- 27. 웹 사이트에서 데이터를 가져 오는 방법은 무엇입니까?
- 28. jQuery에서 div의 ID를 가져 오는 방법은?
- 29. tinymce 편집기에서 이미지를 가져 오는 방법은 무엇입니까?
- 30. ListView에서 전체 개체를 가져 오는 방법은 무엇입니까?
나는 동일했지만 한 번 참조 : OrderedDictionary 목록 = OrderItems에; 개체 strKey = 목록 [e.OldIndex]; DictionaryEntry dicEntry = new DictionaryEntry(); foreach (목록의 DictionaryEntry DE) { if (DE.Value == strKey) { dicEntry.Key = DE.Key; dicEntry.Value = DE.Value; } } –
@ RedSwan : 색인은 어디에 있습니까? – testing
색인은 확실히 열쇠가 아닙니다. * 열쇠는 반드시 "OrderedDictionary"의 별개의 구조입니다. – Conrad