2011-12-29 7 views
5

Fluent googling nie daje odpowiedzi, więc pytanie brzmi:Czy metoda String.Split zapewnia porządek w tablicy wyników?

Czy metoda String.Split zapewnia porządek wynikowych podciągów zgodnie z ich pozycją w początkowym łańcuchu?

Dzięki.

+0

teraz myślę, że będzie tak – V4Vendetta

+2

Masz dobrą odpowiedź i prawdopodobnie najlepsze, czego możemy się spodziewać. Muszę jednak podkreślić, że właśnie dlatego, że obecna implementacja stawia rzeczy w oczekiwanej kolejności, nie jest to naprawdę gwarancja. Powiedział, że byłoby idiotyczne dla zespołu BCL, aby zmienić kolejność. To po prostu nie miałoby sensu. –

+0

Dzięki za przydatny komentarz Jim. Nie ma znaczenia, że ​​zmiana kolejności w String.Split jest mało prawdopodobna, prawdopodobnie lepiej jest unikać oczekiwania na spójne zamówienie z metody split. – iburlakov

Odpowiedz

8

Zgodnie z tym, co ILSpy pokazuje na elementach wewnętrznych , odpowiedź brzmi: tak.

private string[] InternalSplitKeepEmptyEntries(
    int[] sepList, int[] lengthList, int numReplaces, int count) 
{ 
    int num = 0; 
    int num2 = 0; 
    count--; 
    int num3 = (numReplaces < count) ? numReplaces : count; 
    string[] array = new string[num3 + 1]; 
    int num4 = 0; 
    while (num4 < num3 && num < this.Length) 
    { 
     array[num2++] = this.Substring(num, sepList[num4] - num); 
     num = sepList[num4] + ((lengthList == null) ? 1 : lengthList[num4]); 
     num4++; 
    } 
    if (num < this.Length && num3 >= 0) 
    { 
     array[num2] = this.Substring(num); 
    } 
    else 
    { 
     if (num2 == num3) 
     { 
      array[num2] = string.Empty; 
     } 
    } 
    return array; 
} 

Wszystkie elementy (np zmiennych pokazuje array) są zawsze przetwarzane w porządku rosnącym i nie następuje sortowanie.

Wymienia także przykłady, które mają wyniki w tej samej kolejności, co ich kolejność w oryginalnym łańcuchu.

Jak wyżej wymienione są Jim Mischel, jest to tylko implementacja 2, która może ulec zmianie.

+4

Solidny dowód. I też dobra prędkość. – captncraig

1

Tak jest. W przeciwnym razie byłby raczej bezużyteczny.