2012-04-20 29 views
34

Tôi không có nhiều kinh nghiệm với C#, và tôi được sử dụng từ PHP với các mảng kết hợp.Cách dễ nhất để xử lý mảng kết hợp trong C# là gì?

Tôi thấy rằng trong C# là lớp Danh sách và mảng thô, nhưng tôi muốn liên kết một số khóa chuỗi tại một thời điểm nào đó.

Cách dễ nhất để xử lý việc này là gì?

Thx!

+5

@Servy: Chỉ để nitpick trên một số thuật ngữ, ** không **, đó là một ** mảng kết hợp **. Radu là chính xác. http://en.wikipedia.org/wiki/Associative_array. Hơn nữa, có rất nhiều ngôn ngữ trong đó mảng không được lập chỉ mục theo số; JavaScript là một. Và trong khi chúng tôi đang chỉ trích thuật ngữ: một mảng ** liên kết ** không cần được triển khai dưới dạng bảng băm **. Bạn đang bối rối một * kiểu dữ liệu trừu tượng * với * chi tiết triển khai của nó *. Một mảng kết hợp có thể được thực hiện bởi cây nhị phân cân bằng, ví dụ. –

+0

Cảm ơn Eric đã làm rõ. – Servy

Trả lời

61

Sử dụng lớp Từ điển. Nó nên làm những gì bạn cần. Tham chiếu là here.

Vì vậy, bạn có thể làm một cái gì đó như thế này:

IDictionary<string, int> dict = new Dictionary<string, int>(); 
dict["red"] = 10; 
dict["blue"] = 20; 
+2

Hiểu rằng một từ điển không cho phép lập chỉ mục tuyến tính (trừ khi đó là cách bạn khóa nó), vì vậy trong ví dụ trên, 'dict [0]' (cố gắng lấy phần tử đầu tiên của Từ điển) sẽ không biên dịch. Bạn có thể làm việc xung quanh một số cách này; dễ nhất là sử dụng LINQ để liệt kê các đối tượng KeyValuePair của từ điển một tại một thời điểm. Đặt hàng không được bảo đảm, tuy nhiên (hoặc ít nhất nó chỉ được đảm bảo bởi đức hạnh của một chi tiết thực hiện). – KeithS

+9

@KeithS Tuy nhiên, có một [OrderedDictionary] (http://msdn.microsoft.com/en-us/library/system.collections.specialized.ordereddictionary.aspx) nếu đó là chức năng được yêu cầu. – Servy

+1

Hoàn toàn đúng và hoạt động! –

12

Một từ điển sẽ làm việc, nhưng NET có mảng kết hợp xây dựng trong Một ví dụ là lớp NameValueCollection (System.Collections.Specialized.NameValueCollection)..

Một lợi thế nhỏ so với từ điển là nếu bạn cố gắng đọc một khóa không tồn tại, nó trả về null thay vì ném một ngoại lệ. Dưới đây là hai cách để đặt giá trị.

NameValueCollection list = new NameValueCollection(); 
list["key1"] = "value1"; 

NameValueCollection list2 = new NameValueCollection() 
{ 
    { "key1", "value1" }, 
    { "key2", "value2" } 
}; 
Các vấn đề liên quan