2012-03-25 29 views
8

Tôi tự hỏi liệu chỉ mục của một mảng có thể được đặt tên trong C# thay vì giá trị chỉ mục mặc định hay không. Những gì tôi đang tìm kiếm cơ bản là tương đương C# của mã PHP sau:Chỉ mục mảng có thể được đặt tên trong C#?

$array = array(
    "foo" => "some foo value", 
    "bar" => "some bar value", 
); 

Chúc mừng.

+0

Bạn đang thực sự muốn một băm. – seand

Trả lời

26

PHP pha trộn khái niệm mảng và khái niệm từ điển (còn gọi là bảng băm, bản đồ băm, mảng kết hợp) thành một đơn array type.

Trong .NET và hầu hết các môi trường lập trình khác, mảng luôn được lập chỉ mục bằng số. Đối với chỉ số được đặt tên, sử dụng một dictionary thay vì:

var dict = new Dictionary<string, string> { 
    { "foo", "some foo value" }, 
    { "bar", "some bar value" } 
}; 

Không giống như các mảng kết hợp PHP, từ điển trong .NET không được sắp xếp. Nếu bạn cần một từ điển được sắp xếp (nhưng bạn có thể không), .NET cung cấp sorted dictionary type.

+0

Cảm ơn bạn rất nhiều, sẽ chấp nhận câu trả lời khi nó cho phép tôi. – diggersworld

1

Nhìn vào Hashtable trong C#. Đây là cấu trúc dữ liệu thực hiện những gì bạn muốn trong C#.

0

Bạn có thể sử dụng loại Dictionary<string, FooValue> hoặc loại bộ sưu tập hoặc loại tương tự hoặc nếu bạn phải dính vào mảng, hãy xác định Enum với nhãn của bạn.

2

Trong một mảng, không. Tuy nhiên, có một lớp học rất hữu ích Dictionary, đó là một bộ sưu tập các đối tượng KeyValuePair. Nó tương tự như một mảng trong đó nó là một bộ sưu tập các đối tượng có thể lặp lại với các khóa, nhưng tổng quát hơn ở chỗ khóa có thể là bất kỳ loại nào.

Ví dụ:

Dictionary<string, int> HeightInInches = new Dictionary<string, int>(); 
HeightInInches.Add("Joe", 72); 
HeightInInches.Add("Elaine", 60); 
HeightInInches.Add("Michael", 59); 

foreach(KeyValuePair<string, int> person in HeightInInces) 
{ 
    Console.WriteLine(person.Key + " is " + person.Value + " inches tall."); 
} 

MSDN Documentation for Dictionary<TKey, TValue>

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