transpose
행의 모음을 열의 모음으로 뒤집습니다.
Iterable<List<A>> transpose<A>(Iterable<Iterable<A>> rows)
FxAsyncIterable<List<A>> transposeAsync<A>(Iterable<FxAsyncIterable<A>> rows)
강의
transpose는 zip을 이터러블 개수에 제한 없이
일반화한 함수입니다. n번째 출력 리스트에는 아직 n번째 원소가 남아 있는 모든
입력 행의 n번째 원소가 담깁니다. zip/zip3은 각 행을
별도의 인자로 받지만(Dart에서 가변 인자 제네릭을 표현할 수 없기 때문입니다),
transpose는 모든 행을 하나의 이터러블의
이터러블로 받습니다 — transpose([row1, row2, row3]) — 덕분에
행 개수가 런타임에 결정되더라도 그대로 동작합니다.
가장 짧은 입력이 바닥나는 순간 멈추는 zip과 달리,
transpose는 어느 행이든 값이 남아 있는 한 계속
진행합니다. 짧은 행은 뒤쪽 출력 리스트에 더 이상 기여하지 않을 뿐이며,
그 결과 뒤쪽 리스트는 행 개수보다 짧아질 수 있습니다. 모든 행이 완전히
소진되어야 비로소 멈춥니다.
데모 1 · 기본 & 길이가 다른 행
데모 2 · 비동기
직접 해 보기
연습: 행렬을 전치해 보세요(행이 열이 됩니다).