2011-07-06 6 views
5

목록의 각 요소에 대해 작업을 수행하는 List(T).ForEach()이 있습니다. 그러나 MSDN 설명은 List 요소가 통과 할 순서에 대해 아무 것도 말하지 않으며 엄격하게 순서대로 트래버스해야합니다.요소를 순차적으로 순회하는 List (T) .ForEach()를 사용할 수 있습니까?

ForEach()으로 어떻게 해결할 수 있습니까?

+0

List.ForEach의 현재 구현 방법은 다음과 같습니다. https://gist.github.com/1066881 – Kobi

+1

@Kobi : 소스 및 라이센스 견적을 제출 하시겠습니까? (적어도 소스는 라이센스를 언급 할 것이므로) – sehe

+0

@sehe - .Net의 어셈블리에서 IL Spy를 사용하여 디 컴파일. 라이센스를 확인하지 않았지만 연구/학습 목적으로 "공정 사용"에 해당해야합니다. – Kobi

답변

13

또한 목록의 자연 순서입니다 정상 foreach 루프와 같은 순서로 이동합니다.

예, 문서에 명시되어 있지 않지만 명백한 동작이므로 변경하지 않는 것에 의존하는 것이 합리적이라고 생각합니다.

(현재 Parallel.ForEach 물론, 다른 문제입니다.)

+0

+1 및 질문에 게시 된 Msdn 문서의 예에서는 순서가 보존되어 있음을 보여줍니다. 매번 언급 할 필요가없는 몇 가지 사항이 있습니다. – NotJarvis

+5

@NotJarvis :이 경우에 * 명시된 경우 더 좋을 것입니다. –

+0

@Jon : 음, 공정하게 말하면, foreach] (http://msdn.microsoft.com/en-us/library/ttw7t8t6(v= VS.100) .aspx) 명령 자체는 순서를 지정하지 않습니다. 명시 적으로 순서를 전달하는 확장 된 ForEach를 생각하면 좋은 (다소 무의미한) 운동이 될 것입니다. :) –

1

List<T> 클래스는 문서 경우에도 순서를 유지합니다 열거 나 ForEach 방법 를 사용하여 반복 항목의 정렬 된 컬렉션을 나타냅니다, 그래서 이것에 대해서는 아주 명확하지 않습니다.

2

요소의 순서가 필수 인 경우 설계 순서에 따라 Queue<T> (LIFO) 또는 Stack<T> (FIFO)을 사용하는 것이 좋습니다. 이 경우 LINQ 확장 메서드를 사용하는 대신 클래식 루프를 사용하거나 직접 구현해야합니다.

+1

나는 전혀 동의하지 않는다고 생각합니다. List *는 디자인 순서에 따라 정렬됩니다 - 데이터 구조가 작동하는 방식입니다. 그것은 세트 또는 사전이 아닙니다. – Kobi

+0

좋아, 질문에 명확하지 않은 요소를 특정 순서로 또는 특정 위치에 삽입 할 수 있다면 요구 사항에 따라 달라집니다.따라서 새로운 요소를 삽입하는 것이 더 구체적인 요구 사항에 구속되지 않는 한 특정 순서에 대해 List를 사용하는 것은 여전히 ​​완벽합니다. 그러나 아직 언급하지 않았지만 생각할 가치가 있습니다. – Alex

관련 문제