[C#] IGrouping에서 값을 얻는 방법

질문 IGroupingSelect()방법 에 대한 질문이 있습니다 .

내가 IEnumerable<IGrouping<int, smth>>이런 식으로 가지고 있다고 가정 해 봅시다 .

var groups = list.GroupBy(x => x.ID);

여기서 listA는 List<smth>.

그리고 이제 IGrouping어떤 방법으로 각각의 값 을 다른 목록에 전달해야합니다 .

foreach (var v in structure)
{
    v.ListOfSmth = groups.Select(...); // <- ???
}

아무도 그런 맥락 List<smth>에서 값을 얻는 방법을 제안 할 수 있습니까 IGrouping<int, smth>?



답변

IGrouping<TKey, TElement>implements 이므로 모든 백을 하나로 묶는 데 IEnumerable<TElement>사용할 수 있습니다 .SelectManyIEnumerablesIEnumerable

List<smth> list = new List<smth>();
IEnumerable<IGrouping<int, smth>> groups = list.GroupBy(x => x.id);
IEnumerable<smth> smths = groups.SelectMany(group => group);
List<smth> newList = smths.ToList();


답변

foreach (var v in structure)
{
    var group = groups.Single(g => g.Key == v. ??? );
    v.ListOfSmth = group.ToList();
}

먼저 원하는 그룹을 선택해야합니다. 그런 다음 ToList그룹 의 방법을 사용할 수 있습니다 . 는 IGroupingA는 IEnumerable값.


답변

위의 답변 중 더 명확한 버전 :

IEnumerable<IGrouping<int, ClassA>> groups = list.GroupBy(x => x.PropertyIntOfClassA);

foreach (var groupingByClassA in groups)
{
    int propertyIntOfClassA = groupingByClassA.Key;

    //iterating through values
    foreach (var classA in groupingByClassA)
    {
        int key = classA.PropertyIntOfClassA;
    }
}


답변

IGrouping의 정의에서 :

IGrouping<out TKey, out TElement> : IEnumerable<TElement>, IEnumerable

다음과 같은 요소를 반복 할 수 있습니다.

IEnumerable<IGrouping<int, smth>> groups = list.GroupBy(x => x.ID)
foreach(IEnumerable<smth> element in groups)
{
//do something
}


답변