2014-10-23 7 views
0

아무도 도와 줄 수 있습니까?2의 중복으로 주문하는 방법?

나는 목록이 있으며, 여기에는 4 개의 개체가 포함되어 있습니다. 더 적거나 많지 만 항상 2, 4, 6, 8, 10 등의 2의 배수가 포함될 수 있습니다.

내 구체적인 경우에는 내부에 4 개의 개체가 있지만 쌍으로 처리해야하며 그들.

1 또는 2의 값을 가질 수있는 형식으로 주문해야합니다.이 방법을 시도했지만 모든 개체를 차례대로 주문했습니다. 쌍으로 남겨 두어야합니다.

따라서. 두 개의 첫 번째 객체가 서로 소속되어 있고이 두 객체를 함께 정렬 한 다음 다른 두 객체가 서로 속하고 두 객체를 함께 정렬하려고합니다.

예를 들어 보겠습니다.

Name: Apple 
Type: 2 

Name: Orange 
Type: 1 

Name: Pear 
Type: 2 

Name: Peach 
Type: 1 

나는 이렇게 목록을 얻고 싶습니다. 오렌지와 사과는이 쌍에 정렬이 이루어짐에 따라 위치가 변경되었습니다. 그리고 배와 복숭아도 있습니다.

Name: Orange 
Type: 1 

Name: Apple 
Type: 2 

Name: Peach 
Type: 1 

Name: Pear 
Type: 2 

여기 내 분류의 예가 물론 잘못되었습니다.

여러 가지 방법을 시도했지만 물론 쌍을 정렬하고 고려하지 않기 때문에 1을 먼저 얻은 다음 2를 계속 사용합니다.

var wrongSort = myList.Select(x => x.Items).OrderBy(x => x.Type).ToList(); 

물론 "myList"는 항목 목록 인 표준 모음입니다. 항목 목록은 쌍으로 주문하고 싶은 항목입니다.

정말 붙어 있습니다. 어떤 아이디어?

튜플을 사용하여 관련하여 EDIT

이 작동 할 수 있지만 목록은 표준 컬렉션으로 나에게 전달되고 난 여전히 끝에 표준 목록이 필요합니다. 터플은 정말 여기서 일하지 않을거야.

컬렉션은 foreach 반복에서 사용되므로 순서가 중요합니다.

당신은 먼저 "그룹 번호"으로 목록, 다음 순서로 위치를 포함하는 새로운리스트에 목록을 투사 할 수
+2

그들은 당신이 두 가지를 넣어하지 않는 이유 쌍, 경우 단일 래퍼의 항목? 따라서 FruitPair 클래스를 사용하거나 튜플을 사용하면 더 쉽게 사용할 수 있습니다. –

+0

이 목록은 튜플로 나에게 반환되지 않으며 끝에는 표준 컬렉션이 필요합니다.하지만 쌍을 2 x 2로 정렬해야합니다. – Martin

+0

내가 가지고있는 목록은 내가 가지고 있지만 잘못된 순서로 완벽한 형식입니다. 이 목록은 foreach의 반복에서 사용됩니다. – Martin

답변

4

:

myList.Select((f,i) => new {f, i}) // add the position in the list 
     .OrderBy(fi => fi.i/n)  // "groups" into n items (2, 4, etc.) 
     .ThenBy(fi => fi.f.Type)  // orders within each group by the Type 
     .Select (fi => fi.f)   // removes the added index 
+0

그레이트 D 스탠리, 그건 작동 .. 나는 OrderBy와 2로 나누는 것은 쌍으로하는 것을 의미한다고 생각해. 더 설명 할 수 있니? 나는 결코 sene OrderBy를 사용하지 않았다. ... 감사합니다. – Martin