질문 IGrouping
과 Select()
방법 에 대한 질문이 있습니다 .
내가 IEnumerable<IGrouping<int, smth>>
이런 식으로 가지고 있다고 가정 해 봅시다 .
var groups = list.GroupBy(x => x.ID);
여기서 list
A는 List<smth>
.
그리고 이제 IGrouping
어떤 방법으로 각각의 값 을 다른 목록에 전달해야합니다 .
foreach (var v in structure)
{
v.ListOfSmth = groups.Select(...); // <- ???
}
아무도 그런 맥락 List<smth>
에서 값을 얻는 방법을 제안 할 수 있습니까 IGrouping<int, smth>
?
답변
IGrouping<TKey, TElement>
implements 이므로 모든 백을 하나로 묶는 데 IEnumerable<TElement>
사용할 수 있습니다 .SelectMany
IEnumerables
IEnumerable
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
그룹 의 방법을 사용할 수 있습니다 . 는 IGrouping
A는 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
}