transpose

행의 모음을 열의 모음으로 뒤집습니다.

Iterable<List<A>> transpose<A>(Iterable<Iterable<A>> rows) FxAsyncIterable<List<A>> transposeAsync<A>(Iterable<FxAsyncIterable<A>> rows)

강의

transposezip을 이터러블 개수에 제한 없이 일반화한 함수입니다. n번째 출력 리스트에는 아직 n번째 원소가 남아 있는 모든 입력 행의 n번째 원소가 담깁니다. zip/zip3은 각 행을 별도의 인자로 받지만(Dart에서 가변 인자 제네릭을 표현할 수 없기 때문입니다), transpose는 모든 행을 하나의 이터러블의 이터러블로 받습니다 — transpose([row1, row2, row3]) — 덕분에 행 개수가 런타임에 결정되더라도 그대로 동작합니다.

가장 짧은 입력이 바닥나는 순간 멈추는 zip과 달리, transpose어느 행이든 값이 남아 있는 한 계속 진행합니다. 짧은 행은 뒤쪽 출력 리스트에 더 이상 기여하지 않을 뿐이며, 그 결과 뒤쪽 리스트는 행 개수보다 짧아질 수 있습니다. 모든 행이 완전히 소진되어야 비로소 멈춥니다.

데모 1 · 기본 & 길이가 다른 행

데모 2 · 비동기

직접 해 보기

연습: 행렬을 전치해 보세요(행이 열이 됩니다).

관련 항목: zip — 행이 두 개인 특수한 경우 · chunk — 평평한 소스를 먼저 행으로 묶기 · reverse