2009-09-09 5 views
8

Phew 어디서부터 시작해야합니까 ... 두 가지 속성에 따라 작은 목록으로 잘라내는 목록이 있습니다. 작은 목록으로 작업을 마쳤 으면 원본 목록에서 항목을 제거하고 싶습니다. :)C# List</ 순서별/그룹 별 주문/주문

f.ex. CustomerID와 ProductID라는 두 개의 값을 포함하는 List <> CustomerProducts가 있습니다. 제품 ID = 61
의 CustomerID = 1, 제품 일련 =

의 CustomerID = 1 :

var orderedList = CustomerProducts.OrderBy(c => c.CustomerID).ThenBy(c => c.ProductID)ToList();

은 차수의 목록이 지금과 같은 가정 : 나는 목록을 주문하여 시작 61
고객 ID = 1, ProductID = 87
고객 ID = 2, ProductID = 81
CustomerID를 = 2, 제품 일련 = 53

가 지금은 목록의 첫 번째 두 항목이 포함 된 새 목록을 원하는, (그들은 같은 CustomerID를 및 제품 ID를 가지고 있기 때문에)와 orderedList에서이 두 항목을 제거, orderedList가 비어 있지 않은 동안 나머지 부분을 똑같이 계속합니다.

somehting 같은 ...

동안 (orderedList.Count> 0)
{
// 같은 값이 새 목록을 만들 ...
//이에 대한 몇 가지 작업을 수행하십시오 새 목록
//은 ...
//이 계속 orderedList에서 새 목록을 제거
}

,

이것에 대한 스마트 솔루션의 아이디어? 스마트 의미 짧은 코드와 꽤 당연히

+1

그냥 당신이 당신의 porblem를 해결 대답을 얻을 수 있는지 확인하기 : - 당신이 정말로 (잠재적으로 적어도 약간 고가 인)이 점진적으로 작은 정렬 된 목록을 유지하기 위해 필요합니까를, 또는 일치하는 고객 ID/제품 ID의 그룹으로 항목을 순서대로 처리해야합니까? 전자는 새로운 목록을 끊임없이 구성해야하며 (처음에는 상대적으로 비용이 많이 드는 작업을 모두 제거해야합니다.), 후자는 비교적 단순한 그룹화 작업을 사용할 수 있습니다. –

+0

Jonathan의 의견에 동의합니다. 문제를 해결하는 방법에 대한 머리 속에 아이디어가 있지만 문제가 발생하는 것 같습니다. 당신이 사용하려고하는 망치에 관해 우리에게 이야기하는 대신, 당신이 짓고있는 집에 관해서 우리에게 말해주십시오; 망치가 배관공에 대한 잘못된 도구 일 수 있습니다. 제안 된 변경 가능 목록 기반 솔루션의 구현 세부 사항이 아닌 수행중인 비즈니스 운영으로 문제를 특성화 할 수 있습니까? –

답변

15
var groupedList = orderedList 
    .GroupBy(c => new {c.CustomerId, c.ProductId}) 
    .OrderBy(g => g.Key.CustomerId) 
    .ThenBy(g => g.Key.ProductId) 
    .ToList(); 

foreach(var group in groupedList) 
{ 
    List<CustomerProduct> cps = group.ToList(); 
    //do some work with this customer products 

    //no need to do inefficient list removal - just move on to next group. 
} 
+0

완벽하게 작동합니다! 고맙습니다 –

관련 문제