문제

같은 컬렉션의 두 개의 itteration이 같은 순서로 객체를 반환 할 것이라고 가정하는 것이 안전합니까? 분명히, 컬렉션이 달리 변경되지 않은 것으로 가정합니다.

도움이 되었습니까?

해결책

짧은 대답 - 예.

그러나 컬렉션의 항목 순서는 컬렉션 유형 (예 : 사전)에 따라 삽입 된 것과 정확히 일치하지 않을 수 있습니다.

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

다른 팁

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

그러나 이것은 보장되지 않습니다. 수집 유형의 문서는 그것이하는지 여부를 지정해야하지만 대부분의 세부 사항은 일반적으로 과도하게 보입니다. 그러나 안정적이지 않으면 문서가 언급하지 않으면 엄청난 감독이 될 것입니다.

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

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

객체 상태가 변경되지 않는 컬렉션의 경우 요소가 같은 순서로 돌아올 가능성이 높습니다. Dictionary<K,V>, 그러나 이것은 사양에 의해 보장되지는 않지만.

이것이 사실이 아닌 곳의 예로서, 당신은 테이블을 비동기 적으로 압축하거나 크기를 조정하는 해시 가능한 기반 사전 구현을 상상할 수 있습니다. 이러한 구현은 안정적인 반복 순서를 보장하지 않습니다.

모든 내장 컬렉션과 아마도 Sane Collection 클래스에 대한 대답은 "예"이지만 문서에는 제약 조건이 없습니다. IEnumerable. 따라서 모든 반복이 안정적이어야한다고 말하는 것은 없습니다.

다음과 같은 유스 케이스를 상상할 수 있습니다.

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

이것은 각 반복마다 다른 순서를 얻는 클래스로 구현 될 수 있습니다.

따라서 - 이상한 경계선 사례를 고려하고 싶다면 대답은 "여야합니다.아니요”.

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

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

요컨대, 컬렉션 클래스의 내부 구현을 알지 못하면 ~하지 않다 주문에 대해 무엇이든 가정하십시오.

LINQ를 정의합니다 iArderedEnumerable 이 목적을위한 인터페이스.

"수정되지 않은"(NM의 답변) - Dictionary와 같은 많은 복잡한 컨테이너는 주문을 보존하지 않습니다. 때로는 항목을 추가하면 마지막으로 나타나게됩니다 (순서가 보존 된 인상을 주면), 때로는 내부 버킷이 재구성되어 완전히 다른 순서가 제공됩니다.

SortedList <,> 등과 같은 것들에는 분명히 고유 한 규칙이 있습니다.

나는 대부분의 컬렉션에서 이것을 가정하는 것이 안전하다고 말할 것입니다. 특정 컬렉션이 열거자를 비 결정적 방식으로 구현할 수 있다는 것은 가능성의 영역을 넘어서는 것이 아니라 아마도 일어나지 않을 것입니다 ...

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top