2010-04-30 37 views
47

Ok ... đây là câu hỏi về bóng mềm ...Làm thế nào để chèn một mục vào một đối tượng cặp khóa/giá trị?

Tôi chỉ cần có thể chèn cặp khóa/giá trị vào một đối tượng ở một vị trí cụ thể. Tôi hiện đang làm việc với một Hashtable, tất nhiên, không cho phép chức năng này. Cách tiếp cận tốt nhất là gì?

CẬP NHẬT: Ngoài ra, tôi cần có khả năng tra cứu bằng khóa.

Ví dụ ... quá đơn giản hóa và pseudocoded nhưng nên truyền đạt điểm

// 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"); 

Cảm ơn trước.

Trả lời

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")); 

Sử dụng mã này:

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

sản lượng dự kiến ​​nên là:

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 

Cùng sẽ làm việc với một KeyValuePair hoặc bất cứ loại khác mà bạn muốn sử dụng ..

Chỉnh sửa -

Để tra cứu kết thúc bằng phím, bạn có thể làm như sau:

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

Bạn có thể làm điều này với một KeyValuePair bằng cách làm như sau:

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

cuối chỉnh sửa -

Thực hiện câu trả lời cụ thể cho KeyValuePair thay vì chuỗi.

+0

Xin lỗi, tôi vừa cập nhật để làm rõ rằng tôi cần khả năng tra cứu bằng khóa. – Clay

+0

Xem bản chỉnh sửa của tôi để biết cách thực hiện điều đó. –

+1

Tuyệt vời, cảm ơn bạn! – Clay

1

Hashtables không vốn đã được sắp xếp, lựa chọn tốt nhất của bạn là sử dụng cấu trúc khác như SortedList hoặc một ArrayList

+0

Hashtable là mã sẵn có mà tôi thực sự không muốn thay đổi vào lúc này. – Clay

0

tôi sẽ sử dụng Dictionary<TKey, TValue> (miễn là mỗi phím là duy nhất).

EDIT: Xin lỗi, nhận ra bạn muốn thêm nó vào một vị trí cụ thể. Lỗi của tôi. Bạn có thể sử dụng một số SortedDictionary nhưng điều này vẫn không cho phép bạn chèn.

+0

Nhưng từ điển thiếu 'Chèn()' .... –

3

Bạn có cần tra cứu các đối tượng bằng khóa không? Nếu không, hãy xem xét sử dụng List<Tuple<string, string>> hoặc List<KeyValuePair<string, string>> nếu bạn không sử dụng .NET 4.

+0

Có, tôi cần tìm kiếm bằng khóa. – Clay

2

Bạn có thể sử dụng OrderedDictionary, nhưng tôi sẽ hỏi tại sao bạn muốn làm điều đó.

2

Sử dụng danh sách được liên kết. Nó được thiết kế cho tình huống chính xác này.
Nếu bạn vẫn cần tra cứu từ điển O (1), hãy sử dụng cả từ điển và danh sách được liên kết.

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