2014-03-13 5 views
0

는 두 개의 클래스를 가지고 Prop2. Prop1Prop2 반복이 있고 내 솔루션에서 중복을 제거 할 수 없습니다. 그래서 나는이 같은리스트 A를 정렬해야합니다정렬 C 번호 목록

  1. 먼저 목록 B에 Prop2에 의해 정렬 된 목록 B의 객체 (리스트 B가 이미 주문했다)
  2. 그런 다음 목록의 객체를가는 같은 Prop1으로 목록 A의 객체를 간다 prop1과 A는 Prop2 속성으로 목록 B에 존재하지 않습니다.

편집 2014/03/13 14:20

Prop1 컬렉션 고유하지 않으며 (Prop2 동일) 반복

일부 수정 예 2014/03/13 15:23있다.

나는이 있습니다

  var A = new List<Object1> 
      { 
       new Object1{Prop1 = "a_b_c"}, 
       new Object1{Prop1 = "x_y_z"}, 
       new Object1{Prop1 = "a_b_c"}, 
       new Object1{Prop1 = "a_b"}, 
       new Object1{Prop1 = "a"}, 
      }; 
     var B = new List<Object2> 
      { 
       new Object2{Prop2 = "a"}, 
       new Object2{Prop2 = "a_b"}, 
       new Object2{Prop2 = "a_b_c"}, 
      }; 

을 그리고 후 정렬이 예상 :

  var expected = new List<Object1> 
      { 
       new Object1{Prop1 = "a"}, 
       new Object1{Prop1 = "a_b"}, 
       new Object1{Prop1 = "a_b_c"}, 
       new Object1{Prop1 = "a_b_c"}, 
       new Object1{Prop1 = "x_y_z"}, 
      }; 
+0

정렬 유형을 알고 있습니까? 목록 B가 어떻게 정렬되어 있는지 알고 있습니까? 그 정렬 방법을 다시 사용할 수 있습니다. –

+0

'A' 또는 속성'Prop1'을 (를) 정렬 하시겠습니까? 내부 컬렉션이나 외부 컬렉션을 주문해야합니까? 후자의 경우 내부 컬렉션에서 외부 컬렉션을 어떻게 정렬하려고합니까? 어떻게 관련이 있습니까? 예제를 제공해 줄 수 있습니까? –

+0

나는 그것이 최고의 영어가 아닐지도 모른다. 그러나 나는 그 질문이 무엇인지 꽤 분명하게 알았다. –

답변

-1

당신은 아마 당신이 두 번째 경우에 대한 공유 객체 유형에 대한 Enumerable.IntersectEnumerable.Except 에 보고있다.

사용자 지정 같음 비교자를 구현하여 데이터 형식을 비교할 수 있습니다.

+0

@downvoters : 이유 ??? – Tigran

+0

upvoted its allright! @Tigran;) – Sebi

-1

다른 목록의 순서로 정렬하려면 Join을 사용할 수 있습니다. 이렇게하면 외부 컬렉션의 순서 (예 : B)가 유지되며 내부 컬렉션의 요소 (예 : A)를 선택할 수 있습니다.

var sortedA = B.Join (A, b => b.Prop2, a => a.Prop1, (b, a) => a).ToArray(); 

그런 다음 정렬 된 컬렉션에 존재하지 않는 A의 요소를 연결해야합니다.

var allA = A.Concat(A.Except(sortedA)); 
+0

"질문이 무엇인지 분명하게 알았습니까?" 'Prop1'과'Prop2'는 하나의 문자열이 아닌 콜렉션입니다 .-) 이것은 전혀 작동하지 않습니다. 콜렉션은 OP가 원하는 것과 다른 참조로 비교되기 때문에 컴파일됩니다. –

+0

하지만 Prop2와 Prop1이 모두 고유하지 않은 경우 어떻게됩니까? Prop1 컬렉션에 반복이있을 수 있습니다. 그리고 Prop2에는 반복이있을 수 있습니다. 내 작업 솔루션의 경우 Prop1 및 Prop2에서 반복을 삭제할 수 없습니다. –

+0

@TimSchmelter'Prop1' 및'Prop2'는 문자열입니다. public string Prop1 {get; 세트; }'네가 무슨 말하는지 모르겠다? –