LINQ의 평평한 목록


313

나는 LINQ 쿼리를 반환 IEnumerable<List<int>>하지만 반환 만 원 List<int>하므로 모든 레코드를 IEnumerable<List<int>>하나의 배열 로 병합하고 싶습니다 .

예 :

IEnumerable<List<int>> iList = from number in
    (from no in Method() select no) select number;

모든 결과 IEnumerable<List<int>>를 하나만 가져 가고 싶습니다List<int>

따라서 소스 배열에서 : [1,2,3,4] 및 [5,6,7]

하나의 배열 만 원합니다 [1,2,3,4,5,6,7]

감사

답변:


567

시험 SelectMany()

var result = iList.SelectMany( i => i );

8
고마워, 나는 항상 이것을 잊어 버린다-나는 그것이 있다는 것을 알고 있지만 그것을 사용해야 할 때마다 인터넷 검색에 너무 많은 시간을 보낸다. 이 답변을 북마크에 추가하십시오. :-)
BrainSlugs83

한동안 나는 이것이 내가 필요한 유일한 사람이었을 까 두려워했다. 고마워 마이크!
Arnab Chakraborty

7
에 대한 대체 구문이 SelectMany( i => i )있습니까? 이 구문이 많이 사용되는 것을 보았지만 선택 기능의 사용이 줄어든 것 같습니다. 따라서 언어 디자이너가 목록 목록을위한 바로 가기 구문을 제공 할 것으로 예상했을 것입니다.
Andy

86

쿼리 구문으로 :

var values =
from inner in outer
from value in inner
select value;

고마운 정확한 구문 덕분에 많은 SO 답변에 더 자세한 내용이 나와 있습니다.
SilverSideDown

이것은 SelectMany보다 훨씬 낫습니다. IMO에서 무슨 일이 일어나고 있는지 더 명확하게 지적하십시오. 이것을 지적 해 주셔서 감사합니다!
Bryan Rayner

3
개인적으로 나는 항상 쿼리 구문 버전이 메소드 호출 버전보다 훨씬 덜 직관적이라는 것을 알았습니다. Resharper가 쿼리 구문을 제공하면 루프를 LINQ 표현식으로 변환 할 때 항상 실행 취소하려고합니다.
bikeman868

23
iList.SelectMany(x => x).ToArray()

6
@recursive 다른 사람들이 무엇을 놓쳤습니까? .ToArray()? -한 번만 반복해야하는 경우 또는 항목이 변경 될 가능성이있는 경우에는 상황에 .ToArray()맞지 않습니다. 그러나 정적 항목을 사용하면 여러 번 열거 .ToList()하거나 .ToArray()성능을 향상시킬 수 있습니다 (메모리 사용량이 약간 높을수록 일반적으로 꽤 좋습니다).
BrainSlugs83

2
아마도이 경우에는 질문에 지정된 배열이 필요합니다.
재귀

8
우리가 하찮은 일에 속 태우고있는 경우 @recursive, 영업 이익은 그가 반환 할 필요가 있다고 List<int>그래서, .ToList()다음 올바른 선택이 될 것입니다.
MEMark

@MEMark OP는 또한 "단 하나 개의 배열에"상태
StefanJanssen

12

이렇게요?

var iList = Method().SelectMany(n => n);

11

당신이 List<List<int>> k할 수 있다면

List<int> flatList= k.SelectMany( v => v).ToList();
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.