2012-03-25 11 views
8

Zastanawiam się, czy indeks tablicy może mieć nazwę w C# zamiast domyślnej wartości indeksu. Czego właściwie szukam to ekwiwalent C# następującego kodu PHP:Czy indeksy tablic mogą być nazwane w C#?

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

Pozdrawiam.

+0

Naprawdę chce hash. – seand

Odpowiedz

26

PHP łączy pojęcie macierzy i koncepcji słowników (aka tabelach hash hash, mapy, tablice asocjacyjne) w jednym array type.

W .NET i większości innych środowisk programowania tablice są zawsze indeksowane numerycznie. Dla wymienionych indeksów, zamiast używać dictionary:

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

przeciwieństwie asocjacyjnych PHP, słowniki w .NET nie są sortowane. Jeśli potrzebujesz posortowanego słownika (ale prawdopodobnie nie), usługa .NET zapewnia sorted dictionary type.

+0

Fajne dzięki, zaakceptuje odpowiedź, gdy pozwala mi. – diggersworld

1

Spójrz na Hashtable w języku C#. Jest to struktura danych, która robi to, co chcesz w C#.

0

Można użyć numeru Dictionary<string, FooValue> lub podobnego rodzaju lub typu kolekcji lub, jeśli musisz przykleić do tablicy, zdefiniuj Enum z etykietami.

2

W tablicy nr. Istnieje jednak bardzo przydatna klasa Dictionary, która jest zbiorem obiektów KeyValuePair. Jest podobny do tablicy w tym sensie, że jest to zbiór obiektów z kluczami, ale bardziej ogólny, że klucz może być dowolnego typu.

Przykład:

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>

Powiązane problemy