2013-01-23 44 views
20

Tôi đang lưu trữ một chuỗi và giá trị int trong cặp giá trị Khóa.Tìm giá trị hiện có trong cặp Giá trị chính

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

Khi thêm i cần kiểm tra xem chuỗi (Khóa) đã tồn tại trong danh sách chưa, nếu có, tôi cần phải thêm chuỗi đó vào Giá trị thay vì thêm khóa mới.
Cách kiểm tra và thêm?

+10

Vậy tại sao bạn không sử dụng từ điển 'Từ điển'? – leppie

+2

Lưu ý rằng 'KeyValuePair ' là không thay đổi. Bạn sẽ phải xóa mục hiện tại và tạo một mục mới mỗi lần bạn muốn cập nhật giá trị. Đó là lý do tại sao một 'Dictionary' là tốt hơn nhiều như được đưa ra trong các câu trả lời. – mellamokb

+2

Cảm ơn, tôi đang đi với từ điển. – Olivarsham

Trả lời

28

Thay vì Danh sách bạn có thể sử dụng Dictionary và kiểm tra xem nó contains key sau đó thêm các giá trị mới cho chìa khóa Nếu bạn cần sử dụng danh sách, bạn phải foreach danh sách hiện

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

Chỉ cần lưu ý: Từ điển không cho phép truy cập theo chỉ mục. Nếu đó là một yêu cầu (như nó là trong trường hợp của tôi), thì đây không phải là một giải pháp khả thi. – Dan

+1

@Dan, 'Dictionary' không cho phép truy cập theo chỉ mục, như' dictionary ["myKey"] 'Tôi không chắc bạn muốn nói gì. – Habib

+4

Nhưng mặt khác Dictionary không hỗ trợ các khóa giống nhau với các giá trị khác nhau. – SSpoke

4

Nhu cầu của bạn mô tả chính xác thiết kế của Dictionary s?

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

Bản đồ là một từ rất Java, p – leppie

+0

@leppie yup, đã sửa nó, tôi còn nhiều hơn thế giới C++/Java .. –

+0

C# tương đương với Bản đồ? – Olivarsham

7

sử dụng dictonary. Dictionary in C# và tôi đề nghị bạn đọc bài này 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); 

để kiểm tra. sử dụng containsKey ContainsKey

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

sự và tìm chìa khóa. Đơn giản, bạn có thể sử dụng hashtable.

4

Để chắc chắn, từ điển phù hợp hơn trong trường hợp của bạn. Bạn không thể sửa đổi Giá trị của lớp KeyValue<string,int> vì nó là Không thể thay đổi.

Nhưng ngay cả khi bạn vẫn muốn sử dụng List<KeyValuePair<string, int>>();. Bạn có thể sử dụng IEqualityComparer<KeyValuePair<string, int>>. Mã sẽ như thế nào.

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(); 
    } 
} 

Và sử dụng nó trong Có như

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 
     } 

mà không nghe cách tốt.

hy vọng thông tin này sẽ giúp ..

Các vấn đề liên quan