2013-08-30 2 views
1

나는 파이썬 사람이고 최근에 C# 프로젝트를 시작했습니다. 내 코드의 한 부분은 myList = List<double[][]>이며 다른 기능으로 전달하려면 myNewList = List<double[]>으로 변환해야합니다.목록 <double[][]> 목록에 <double[]>

그래서 myList은 다음과 같습니다 가정 :

{{{0.0, 1.0}, {2.0, 3.0}}, {{4.0, 5.0}, {6.0, 7.0}}} 

내가 myNewList는 다음과 같이 할 : 파이썬에서

{{0.0, 1.0}, {2.0, 3.0}, {4.0, 5.0}, {6.0, 7.0}} 

, 내가 이런 짓을 했을까 :

이제
myNewList = list(itertools.chain.from_iterable(myList)) 

, 루프를 foreach 루프로 매우 쉽게 구현할 수 있습니다. AddmyNewList으로 보내야하지만 누구든지이 작업을 수행 할 수있는 기본 방법을 알고 있습니까?

답변

2

당신은 목록을 "결합"하는 방법 SelectMany를 사용할 수 있습니다. 기본적으로 목록의 목록이 있으면 모든 목록을 하나로 연결합니다. 이 경우에는 List<double[][]>이므로 세 번 중첩됩니다.

List<double[]> flattenedList = myList.SelectMany(x => x.Select(y => y).ToArray()).ToList(); 

당신을 위해 할 것입니다. 첫 번째 Select은 실제로 아무것도하지 않습니다. for 루프처럼 생각하고 싶습니다. "for each x do x.SelectMany"로 읽으십시오. 하나의 레이어를 double[][] 요소로 가져 오는 것이 필요합니다. 너 평평 해.

myNewList.SelectMany(x => x.Select(y => y).ToArray()).ToList(); 

이 당신에게 List<double[]>을 줄 것이다 :

+0

@Servy 좋은 전화. 고쳤다. – evanmcdonnal

+0

4 요소 배열을 가진 2 요소 목록을 생성합니다. 올바르지 않습니다. – lukegravitt

+0

@lukegravitt 오, 나는 당신이 말하는 것을 본다 ... 나는 예상 된 출력을 면밀히 바라 보지 않았다고 생각한다. 나는 대답을 수정할 것이다. – evanmcdonnal

5

를보다 효율적으로 사용 LINQ :

var myNewList = myList.SelectMany(x=>x).ToList(); 
+0

@Servy 당신 말이 맞아요, 업데이트했습니다. –

+0

그러면 샘플 입력에 대해 길이가 두 개의 배열이됩니다. OP는 길이가 2 인 4 개의 배열을 원합니다. – Servy

+0

4 요소 배열을 가진 2 요소 목록을 생성합니다. 올바르지 않습니다. – lukegravitt

4

이 시도해보십시오.

+0

위의 코드를 VS2012에서 시도해보고 예상 한 결과를 얻었습니다. 4 개의 double []을 가진리스트를 나에게 준다. 어쩌면 나는 질문을하지 않는다 ??? –

+0

NVM, 올바른 대답입니다. – Servy

+0

+1 이것을 테스트했습니다. 원하는 결과를 정확하게 생성합니다. – lukegravitt