>백엔드 개발 >C#.Net 튜토리얼 >.NET Framework - 컬렉션 및 LINQ의 기술 코드 '그룹화'에 대한 자세한 설명

.NET Framework - 컬렉션 및 LINQ의 기술 코드 '그룹화'에 대한 자세한 설명

黄舟
黄舟원래의
2017-03-18 13:13:281609검색

우리는 목록과 같은 메모리 컬렉션의 하나 또는 일부 개별 속성에 따라 을 그룹화하고 통계를 표시하는 경우가 많습니다. 가장 쉽게 생각하는 방법은 특정 키 속성을 기반으로 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.