2008-10-03 4 views

답변

15

짧은 대답 - 예.

그러나 컬렉션의 항목 (예 : 사전)에 따라 컬렉션의 항목 순서가 삽입 된 순서와 다를 수도 있습니다.

그러나 foreach 루프를 사용하여 수정되지 않은 단일 모음을 반복 할 때마다 동일한 결과를 얻을 수 있습니다.

+0

흠 ... 우리 둘 다 똑같은 짓을 한 것 같습니다. 한 문장 쓴 후 게시하고 즉시 수정하여 정교하게 작성합니다. –

+0

사실. 귀하의 답변이 제 것보다 적절하다고 생각합니다. OP가 OP로 결정할 것입니다. 확실하게 인기 투표에서이기는 것 같습니다. –

+0

확실한 대답으로 태그를 지정하는 문제는 물론 정확하지 않습니다! –

25

컬렉션 유형에 따라 다릅니다. 대부분의 콜렉션의 경우 대답은 "예"입니다.

그러나 이것은 보증하지 않습니다. 콜렉션 유형의 문서는 그것이 수행되는지의 여부를 지정해야하지만, 대부분은 그런 세부 사항이 일반적으로 보입니다. 그러나 안정적이지 않으면 문서에서 언급하지 않으면 엄청난 감독이 될 것입니다.

0

나는 대부분의 컬렉션에서 이것을 가정하는 것이 안전하다고 말할 수 있습니다. 어떤 컬렉션이 비 결정론적인 방식으로 구현 된 열거자를 가질 수있는 가능성의 영역을 넘어서는 것은 아니지만, 아마도 그렇게되지는 않을 것입니다 ...

+0

"아마"효과가있는 코드를 원한다면 달려 있습니다. 개인적으로 나는 그것보다 더 확신하고 싶습니다! – MarkJ

6

모든 내장 컬렉션에 대한 대답은 "예"이지만 그 밖의 정성 어린 컬렉션 클래스는 문서에 IEnumerable에 대해 공식화 된 제약 조건이 없습니다. 따라서 모든 반복은 안정적이어야 함을 알려주는 것은 없습니다.

foreach (int i in new Shuffler(1, 2, 3, 4, 5, 6, 7, 8, 9)) 
    Console.WriteLine(i); 

이 잘 각 반복에 대해 다른 순서를 산출하는 클래스로 구현 될 수 있습니다

나는 다음과 같은 사용 사례를 상상할 수있다.

그래서 이상한 경계선 사례를 고려하려면 대답은 "아니요"이어야합니다.

+0

어, 제임스가 대답을 바꿨습니까? 광산을 썼을 때, 그것은 여전히 ​​원래의 것이 었습니다. : -/ –

+0

주문이 일관 적이 지 않을 때 우수 사례! –

3

일반적으로 요소는 동일한 순서로 반환되지만 절대적으로 보장되지는 않습니다. 그것은 전적으로 컬렉션 클래스의 내부 구현에 의존합니다.

예를 들어 임의의 순서로 요소를 반환하도록 특별히 고안된 컬렉션 클래스의 사례를 볼 수 있습니다.

요약하면 컬렉션 클래스의 내부 구현을 알지 못하면 에 대해 아무 것도 가정하지 않습니다.

10

반복하는 클래스의 구체적인 구현을 알지 못한다면이를 보장 할 수 없습니다.

요소 순서가 정의 된 컬렉션 (예 : List<T>)은 안정된 순서로 열거됩니다.

개체의 상태가 변경되지 않는 컬렉션의 경우 요소가 동일한 순서로 다시 나타날 가능성이 큽니다. 예 : Dictionary<K,V>이지만 사양에 의해 보장되지는 않습니다.

예를 들어,이 경우가 아닌 경우 테이블을 비동기 적으로 압축하거나 크기를 조정하는 해시 테이블 기반 사전 구현을 생각해 볼 수 있습니다.이러한 구현은 안정된 반복 순서를 보장하지 않습니다.

1

Re "unmodified"(NM 답장) - 사전과 같은 많은 복잡한 컨테이너가 순서를 유지한다고 보장하지 않습니다. 때로는 항목을 추가하면 마지막으로 표시되어 주문이 유지된다는 인상을 주며 때로는 내부 버킷이 완전히 다른 순서로 재구성되도록합니다.

SortedList <과 같은 항목은 분명히 자체 규칙이 있습니다.

관련 문제