2011-08-14 9 views
9

I.E. Jeśli chcę wybrać z tablicy, czy wynikowy obiekt jest konieczny w kolejności?Czy kolekcje C# zawsze wymuszają zamówienie?

public class Student { public string FullName, ... } 
public class School { public string Name, public Student[] Students, ... } 

public void StudentListWork(School thisSchool) 
{ 
    IEnumerable<string> StudentNames = thisSchool.Students.Select(student => student.FullName); 

    // IS StudentNames GUARANTEED TO BE IN THE SAME ORDER AS thisSchool.Students? 
} 

Dzięki!

+0

Czym są uczniowie? Lista? posortowana lista? tablica? słownik? "kolekcje" to termin szeroki i mają różne cechy. –

+0

@Mystere: Zgodnie z drugą linią, jest to tablica. –

+0

@ Jon Skeet - Doh! brakowało tego ... –

Odpowiedz

15

Tak, w to koperty:

  • Tablice zwraca elementy w porządku naturalnym przedmiotów
  • Enumerable.Select powraca w kolejności oryginalnej sekwencji (po projekcji, oczywiście)

Niektóre kolekcje mają jednak , a nie zachować zamówienie. W szczególności:

  • Kolekcje takie jak HashSet<T> i Dictionary<TKey, TValue> wprowadzać żadnych gwarancji co do kolejności, w jakiej są wartości zwracanej
  • Kolekcje takie jak SortedSet<T> i SortedDictionary<TKey, TValue> mają zastosowanie gwarantuje Zamawiającemu na podstawie elementów umieszczonych w nich