2009-02-04 6 views
2

저는 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 설명서에 "배열을 정렬 할 수 있다고 보장 할 수 없기 때문에 묻습니다." 그래서 나는 약간 확신이 없다.

답변

5

예, 예에서는 항목이 원래 순서대로 유지됩니다.

MSDN 설명서는 배열이 배열이기 때문에 반드시 정렬되지는 않지만 일단 배열에 있으면 항목이 다시 정렬되지 않는다는 것을 나타냅니다. Split() 작업은 순서를 유지하면서 주어진 토큰에 따라 분류합니다.

+1

예. 저는 "보존"이 기억해야 할 중요한 문제라고 생각합니다. –

+0

그게 제가 찾고 있던 설명입니다. 감사. – rvarcher

1

예, 이러한 작업에 대한 주문이 유지됩니다.

-1

. NET 문자열은 immutable objects입니다. 간단히 말해서, 문자열 S와 Split (",")이 반환 한 문자열 S는 서로 다른 메모리에 있습니다.

1

예, String.Split은 문자열을 따라 가며 모든 것이 순서대로 유지됩니다. .NET 반사경에서 :

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; 
} 
+0

질문을 약간 잘못 읽었습니다. 세르게이 (Serguei)는보다 정교한 답변을보다 명확하게 제시합니다. –

관련 문제