2013-01-23 9 views
20

키 값 쌍에 문자열과 int 값을 저장합니다.키 값 쌍의 기존 값 찾기

var list = new List<KeyValuePair<string, int>>(); 

것은 내가 대신 새 키를 추가하는 값으로 추가 할 필요가있는 경우 나, 문자열 (키)가 이미 목록에 있는지 확인해야 추가하는 동안.
확인하고 추가하는 방법은 무엇입니까?

+10

그럼 왜 '사전'을 사용하지 않습니까? – leppie

+2

'KeyValuePair '는 불변입니다. 기존 항목을 제거하고 값을 업데이트 할 때마다 새 항목을 만들어야합니다. 그래서 '사전'이 답변에서 주어진 것보다 훨씬 낫습니다. – mellamokb

+2

고마워, 나는 사전과 함께 갈거야. – Olivarsham

답변

28

대신 목록 당신이 Dictionary를 사용하여 확인할 수 있습니다 사용 , 그리고 열쇠를 찾으십시오. 간단히 해시 테이블을 사용할 수 있습니다.

+0

그냥 참고 : 사전은 색인에 의한 액세스를 허용하지 않습니다. 그것이 (필자의 경우처럼) 요구 사항이라면, 이것은 실행 가능한 해결책이 아닙니다. – Dan

+1

@Dan,'Dictionary'는'dictionary [ "myKey"]'처럼 색인에 의한 접근을 허용합니다. 당신이 의미하는 것이 확실하지 않습니다. – Habib

+4

그러나 다른 한편 사전은 다른 값을 가진 동일한 키를 지원하지 않습니다. – SSpoke

4

고객님의 요구 사항은 정확히 Dictionary입니다.

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

// Add some elements to the dictionary. There are no 
// duplicate keys, but some of the values are duplicates. 
openWith.Add("txt", "notepad.exe"); 

// If a key does not exist, setting the indexer for that key 
// adds a new key/value pair. 
openWith["doc"] = "winword.exe"; 
+1

지도는 매우 자바 어로 p – leppie

+0

@leppie yup, 고정되어 있습니다. C++/Java 세계에서 더 많은 것입니다. –

+0

지도와 동일한 C#입니까? – Olivarsham

7

dictonary를 사용하십시오. Dictionary in C#와 나는 당신이 Dictonary in .net

Dictionary<string, int> dictionary = 
     new Dictionary<string, int>(); 
    dictionary.Add("cat", 2); 
    dictionary.Add("dog", 1); 
    dictionary.Add("llama", 0); 
    dictionary.Add("iguana", -1); 

확인이 게시물을 읽을하는 것이 좋습니다. 이 contains key 다음 기존 키

int newValue = 10; 
Dictionary<string, int> dictionary = new Dictionary<string, int>(); 
if (dictionary.ContainsKey("key")) 
    dictionary["key"] = dictionary["key"] + newValue; 
5

당신이 목록을 사용해야하는 경우 foreach는해야 목록에 새 값을 추가하는 경우 ContainsKey이 ContainsKey

if (dictionary.ContainsKey("key")) 
    dictionary["key"] = dictionary["key"] + yourValue; 
4

확실히 사전은 귀하의 경우에 적합합니다. KeyValue<string,int> 클래스의 값은 변경할 수 없으므로 수정할 수 없습니다.

그래도 여전히 List<KeyValuePair<string, int>>();을 사용하려는 경우에도 마찬가지입니다. IEqualityComparer<KeyValuePair<string, int>>을 사용할 수 있습니다. 코드는 비슷합니다. 하지 좋은 방법 소리 않는

var list = new List<KeyValuePair<string, int>>(); 
     string checkKey = "my string"; 
     if (list.Contains(new KeyValuePair<string, int>(checkKey, int.MinValue), new KeyComparer())) 
     { 
      KeyValuePair<string, int> item = list.Find((lItem) => lItem.Key.Equals(checkKey)); 
      list.Remove(item); 
      list.Add(new KeyValuePair<string, int>("checkKey", int.MinValue));// add new value 
     } 

처럼

public class KeyComparer : IEqualityComparer<KeyValuePair<string, int>> 
{ 

    public bool Equals(KeyValuePair<string, int> x, KeyValuePair<string, int> y) 
    { 
     return x.Key.Equals(y.Key); 
    } 

    public int GetHashCode(KeyValuePair<string, int> obj) 
    { 
     return obj.Key.GetHashCode(); 
    } 
} 

는 사용이에 포함되어 있습니다.

희망이 정보는 ..