it-swarm-ko.tech

사전에서 첫 번째 요소 가져 오기

다음과 같은 선언이 있습니다.

Dictionary<string, Dictionary<string, string>> like = new Dictionary<string, Dictionary<string, string>>();

첫 번째 요소를 꺼내야하지만 키 또는 값을 모릅니다. 가장 좋은 방법은 무엇입니까?

43
cdub

여기서 First를 호출하는 것은 실제로 Dictionary<TKey,TValue>에 의해 구현되는 IEnumerable의 Linq 확장을 호출하는 것입니다. 그러나 사전의 경우 "첫 번째"는 정의 된 의미가 없습니다. this answer 에 따르면 마지막으로 추가 된 항목은 "First"(즉, Stack)가되지만 구현에 따라 다릅니다. 보장 동작이 아닙니다. 다시 말해 assumeFirst를 호출하여 정의 된 항목을 얻으려면 문제를 구걸해야합니다. 아래 Bobson이 지적한 것처럼 사전에서 random 항목을 얻는 것과 유사합니다. 그러나 때로는 사전의 any 항목이 필요하기 때문에 유용합니다.


Linq First()을 사용하십시오.

var first = like.First();
string key = first.Key;
Dictionary<string,string> val = first.Value;

사전에 First를 사용하면 KeyValuePair가됩니다 (이 경우 KeyValuePair<string, Dictionary<string,string>>).


또한 could Linq First와 결합하여 OrderBy를 사용하여 특정 의미를 도출합니다.

var first = like.OrderBy(kvp => kvp.Key).First();
91
McGarnagle

Linq-less 방법으로 사전에서 an 요소를 얻는 방법을 원하는 사람

var d = new Dictionary<string, string>();
d.Add("a", "b");
var e = d.GetEnumerator();
e.MoveNext();
var anElement = e.Current;
// anElement/e.Current is a KeyValuePair<string,string>
// where Key = "a", Value = "b"

이것이 구현에 고유한지 확실하지 않지만 사전에 요소가 없으면 CurrentKeyValuePair<string, string> 여기서 키와 값은 모두 null입니다.

(이 문제를 해결하기 위해 linq의 First 메소드의 논리를 살펴보고 LinqPad 4)

22
JesseBuesking

First()을 사용할 수 있지만 사전에는 순서가 없습니다. 대신 OrderedDictionary 를 사용하십시오. 그런 다음 FirstOrDefault를 수행 할 수 있습니다. 이런 식으로 의미가 있습니다.

15
RAS

편집 : OrderedDictionary를 사용하십시오.

첫 번째 값을 검색하려면 FirstOrDefault()을 사용하는 것이 좋습니다.

전의:

var firstElement = like.FirstOrDefault();
string firstElementKey = firstElement.Key;
Dictinary<string,string> firstElementValue = firstElement.Value;
4
naren.katneni

사전은 항목의 순서를 정의하지 않습니다. 항목이 필요한 경우 사전의 Keys 또는 Values 속성을 사용하여 하나를 선택하십시오.

2
Alexei Levenkov
Dictionary<string, Dictionary<string, string>> like = new Dictionary<string, Dictionary<string, string>>();
Dictionary<string, string> first = like.Values.First();
0
Agustin Meriles

사전에서 첫 번째 요소를 찾는 쉬운 방법을 찾을 수 없습니다 :)

 Dictionary<string, Dictionary<string, string>> like = 
 newDictionary<string,Dictionary<string, string>>();

 foreach(KeyValuePair<string, Dictionary<string, string>> _element in like)
 {
   Console.WriteLine(_element.Key); // or do something
   break;
 }
0
Levris First