Элементы в массиве или списке поддерживают свой порядок? - PullRequest
3 голосов
/ 05 февраля 2009

Я кодирую VB.NET в VS2008.

У меня есть строка чисел, разделенных запятыми, т.е. 16,7,99,1456,1,3

Я делаю это в VB:

Dim MyArr() As String = MyString.Split(",")

Будет ли MyArr хранить элементы в том порядке, в котором они были в строке?

Если я сделаю это:

For Each S as String in MyString.Split(",")
    'Do something with S
    'Will my items be in the same order they were
    'in the string?
Next

Я проверил его, и он, похоже, сохраняет порядок сортировки, но будет ли он ~ всегда ~ сохранять порядок?

Если он не поддерживает порядок, то каков хороший способ разбить строку и сохранить порядок?

Я спрашиваю, потому что документация MSDN Array гласит: «Массив не гарантируется для сортировки». Так что я немного не уверен.

Ответы [ 4 ]

7 голосов
/ 05 февраля 2009

Да, в вашем примере элементы останутся в исходном порядке.

В документации MSDN указано, что массив не обязательно сортируется только потому, что это массив, но как только элементы находятся в массиве, они не будут переставлены Операция Split () разбивает ее на основе данного токена, сохраняя порядок.

1 голос
/ 05 февраля 2009

Да, String.Split идет по струне, все останется в порядке. От .NET Reflector:

private string[] InternalSplitKeepEmptyEntries(int[] sepList, int[] lengthList, int numReplaces, int count)
{
    int startIndex = 0;
    int index = 0;
    count--;
    int num3 = (numReplaces < count) ? numReplaces : count;
    string[] strArray = new string[num3 + 1];
    for (int i = 0; (i < num3) && (startIndex < this.Length); i++)
    {
        strArray[index++] = this.Substring(startIndex, sepList[i] - startIndex);
        startIndex = sepList[i] + ((lengthList == null) ? 1 : lengthList[i]);
    }
    if ((startIndex < this.Length) && (num3 >= 0))
    {
        strArray[index] = this.Substring(startIndex);
        return strArray;
    }
    if (index == num3)
    {
        strArray[index] = Empty;
    }
    return strArray;
}
1 голос
/ 05 февраля 2009

Да, для этих операций будет поддерживаться порядок.

0 голосов
/ 05 февраля 2009

В .NET строки неизменяемые объекты . Короче говоря, строка S и те, которые были возвращены Split (","), живут в другой памяти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...