2010-04-30 3 views
47

Ok ... 여기에 소프트볼 질문이 있습니다 ...키/값 쌍 객체에 항목을 삽입하는 방법은 무엇입니까?

특정 위치의 객체에 키/값 쌍을 삽입 할 수 있어야합니다. 나는 현재이 기능을 허용하지 않는 Hashtable로 작업하고있다. 최선의 접근 방법은 무엇입니까?

업데이트 : 또한 키로 조회하는 기능이 필요합니다. 예를 ... 과도하게 단순화 및 pseudocoded하지만 사전에 포인트를

// existing Hashtable 
myHashtable.Add("somekey1", "somevalue1"); 
myHashtable.Add("somekey2", "somevalue2"); 
myHashtable.Add("somekey3", "somevalue3"); 

// Some other object that will allow me to insert a new key/value pair. 
// Assume that this object has been populated with the above key/value pairs. 
oSomeObject.Insert("newfirstkey","newfirstvalue"); 

감사를 전달해야 들어

.

답변

83
List<KeyValuePair<string, string>> kvpList = new List<KeyValuePair<string, string>>() 
{ 
    new KeyValuePair<string, string>("Key1", "Value1"), 
    new KeyValuePair<string, string>("Key2", "Value2"), 
    new KeyValuePair<string, string>("Key3", "Value3"), 
}; 

kvpList.Insert(0, new KeyValuePair<string, string>("New Key 1", "New Value 1")); 

이 코드를 사용하여

Key: New Key 1 Value: New Value 1 
Key: Key 1 Value: Value 1 
Key: Key 2 Value: Value 2 
Key: Key 3 Value: Value 3 

이 같은 무엇이든 다른 종류의 사용하려는 KeyValuePair 이상에서 작동됩니다 ..

편집 -

-

var result = kvpList.Where (kvp => kvp.Value == "Lookup"); 

마지막 편집 : 다음을 수행하여

var result = stringList.Where(s => s == "Lookup"); 

당신은 KeyValuePair이 할 수 있습니다 :

는 다음을 수행 할 수 있습니다, 키에 의해 조회하려면 문자열이 아닌 KeyValuePair에 대한 답변을 만들었습니다.

+0

죄송 합니다만, 열쇠로 조회 할 수있는 기능이 필요하다는 것을 명확히하기 위해 업데이트되었습니다. – Clay

+0

내 편집 방법을 참조하십시오. –

+1

훌륭합니다, 감사합니다! – Clay

1

해시 테이블은 본질적으로 가장 좋은 건 그런 SortedList 또는 ArrayList를

+0

Hashtable은 현재 변경하지 않는 것이 좋습니다 기존 코드입니다. – Clay

0

내가 사용하는 것이 Dictionary<TKey, TValue> (너무 오래 각 키가 고유로)와 같은 다른 구조를 사용하는 것입니다, 정렬되지 않습니다.

편집 : 죄송합니다. 특정 위치에 추가하려고합니다. 내 잘못이야. SortedDictionary을 사용할 수는 있지만 여전히 삽입 할 수는 없습니다.

+0

그러나 사전에는'Insert() '가 없습니다 .... –

3

키로 개체를 검색해야합니까? 그렇지 않은 경우 List<Tuple<string, string>> 또는 List<KeyValuePair<string, string>>을 사용하는 것이 좋습니다.

+0

예, 열쇠로 찾아야합니다. – Clay

2

OrderedDictionary을 사용할 수 있지만 그 이유는 궁금 할 것입니다. 예상 출력해야

foreach (KeyValuePair<string, string> kvp in kvpList) 
{ 
    Console.WriteLine(string.Format("Key: {0} Value: {1}", kvp.Key, kvp.Value); 
} 

:

2

연결된 목록을 사용하십시오. 이 정확한 상황을 위해 설계되었습니다.
사전 O (1) 조회가 여전히 필요한 경우 사전과 연결된 목록을 모두 사용하십시오.

관련 문제