2012-03-25 2 views
8

Мне интересно, можно ли присвоить индексу массива имя в C# вместо значения индекса по умолчанию. То, что я в основном ищу, является эквивалентом C# следующего кода PHP:Можно ли назвать индексы массива в C#?

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

Cheers.

+0

Вы действительно хочет хэш. – seand

ответ

26

PHP смешивает концепцию массивов и концепцию словарей (ака хэш-таблиц, хеш-карт, ассоциативных массивов) в одном array type.

В .NET и большинстве других программных сред массивы всегда индексируются численно. Для названных показателей, используйте вместо dictionary:

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

В отличие от ассоциативных массивов в PHP, словари в .NET не сортируются. Если вам нужен отсортированный словарь (но, вероятно, нет), .NET предоставляет sorted dictionary type.

+0

Прохладный спасибо, примет ответ, когда это позволит мне. – diggersworld

1

Посмотрите на Hashtable на C#. Это структура данных, которая делает то, что вы хотите на C#.

0

Вы можете использовать Dictionary<string, FooValue> или аналогичный тип или тип коллекции или, если вы должны придерживаться массива, определите Enum с вашими ярлыками.

2

В массиве нет. Тем не менее, существует очень полезный класс Dictionary, который представляет собой набор объектов KeyValuePair. Он похож на массив, поскольку он представляет собой итерируемый набор объектов с ключами, но более общий в том, что ключ может быть любого типа.

Пример:

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>

Смежные вопросы