数组或列表中的项目是否保持其顺序?

时间:2009-02-04 23:40:34

标签: vb.net arrays string sorting

我在VS2008中编写VB.NET。

我有逗号分隔的数字字符串,即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 个答案:

答案 0 :(得分:7)

是的,在您的示例中,项目将保留原始顺序。

MSDN文档表明,Array不一定只是因为它是一个Array而被排序,但是一旦这些项在Array中,它们就不会被重新排列。 Split()操作将根据给定的标记将其分解,保留顺序。

答案 1 :(得分:1)

是的,将保留这些操作的订单。

答案 2 :(得分:1)

是的,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;
}

答案 3 :(得分:-1)

在.NET中,字符串是immutable objects。简而言之,字符串S和Split(“,”)返回的字符串存在于不同的记忆中。