우리는 목록과 같은 메모리 컬렉션의 하나 또는 일부 개별 속성에 따라 을 그룹화하고 통계를 표시하는 경우가 많습니다. 가장 쉽게 생각하는 방법은 특정 키 속성을 기반으로 List 인스턴스를 탐색하고 이를 다음 사전 유형
Dictionary<string, List<MyObject>
으로 변환하는 것입니다. 예를 들어,
List<Car> cars = new List<Car>(){ new Car(1,"audiA6","private"), new Car(2,"futon","merchant"), new Car(3,"feiren","bike"), new Car(4,"bukon","private"), new Car(5,"baoma","private"), new Car(6,"dayun","merchant") };
가 사용하려는 자동차가 있는 경우 id를 키로 사용하여 사전 idCarDict로 변환합니다. 이 메서드는 가장 복잡한 논리를 가지며 가장 많은 코드를 필요로 하며
ar idCarDict = cars.ToDictionary(car=>car.id);그러나 이 방법에는 제한이 있으며 키 코드는
객체 의 인스턴스가 하나만 있을 수 있습니다. 즉, 반환되는 유형은
Dictionary<string,Object>이므로 좋지 않습니다. 하나의 키 코드가 여러 인스턴스에 해당할 수 있으므로 GroupBy를 먼저 키 코드별로 그룹화한 다음 사전으로 변환해야 합니다. 예를 들어, 이 모델에서 여러 자동차를 얻기 위해 유형을 키로 사용하려고 합니다.
Dictionary<string, List<Car>> typeCarDict = cars.GroupBy(car => car.type). ToDictionary(g => g.Key, g => g.ToList());이 변환 코드는 간단하고 다음 순회 논리보다 훨씬 좋습니다!
var dict = new Dictionary<string,List<Car>>();foreach(var car in cars) { if(dict.Contains(car.type)) dict[car.type].Add(car); else dict.Add(car.type,new List<Car>(){car}));}이것은 여러 인스턴스에 해당하는 하나의 키 코드 문제를 해결합니다. 그러면 여러 인스턴스에 해당하는 여러 키 코드의 문제에 따라 List에서 GroupBy를 사용하여 해결할 수 있습니까? 달성할 수 없습니다. 이때 여러 키 코드를 새 개체로 결합하는 Linq 문을 작성해야 합니다.
new {key1, key2, ...}예를 들어 이러한 컬렉션이 있고 컬렉션의 요소가 있습니다. ValPair 객체인 경우 이 객체에는 두 개의 정수 요소가 포함되어 있으며 Val1은 더 작은 것이고 Val2는 상대적으로 더 큽니다. Val1과 Val2의 조합에 따라 그룹화하는 방법은 무엇입니까?
다음 논리를 참조하세요.
static void printfDuplicateCompare(List<ValPair> compares) { //按组合键分组后,每组元素个数大于2的分组,按降序排序 var rtnByVal1 = from item in compares group item by new { item.Val1, item.Val2 } into g where g.Count()>1 orderby g.Count() descending select g; //按Val1和Val2组合为字典键,元素个数为值 var dict = rtnByVal1.ToDictionary(g => g.Key,g=>g.Count()); }요약List의 GroupBy는 하나의 키 조합을 기준으로만 그룹화할 수 있습니다. Linq 문 조합.
위 내용은 .NET Framework - 컬렉션 및 LINQ의 기술 코드 "그룹화"에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!