LoginSignup
1
2

More than 1 year has passed since last update.

Swift 配列 転置行列 m×nからn×mに変換

Last updated at Posted at 2021-05-06

コピペ用

二次元配列の各要素から、同じ位置にあるものを集めて新しい配列を作る
[[あ, い, う, え, お], [か, き, く, け, こ], [さ, し, す, せ, そ]]
->
[[あ, か, さ], [い, き, し], [う, く, す], [え, け, せ], [お, こ, そ]]]

Extensions.swift
// 転置行列
extension Array where Element: RandomAccessCollection, Element.Index == Int {
    func transpose() -> [[Element.Element]] {
        return self.isEmpty ? [] : (0...(self.first!.endIndex - 1)).map { i -> [Element.Element] in self.map { $0[i] } }
    }
}

使い方

配列に対して .transpose() を使う

Sample.swift
let a = [
    [1, 2, 3],
    [4, 5, 6]
].transpose()
// a: [
//   [1, 4],
//   [2, 5],
//   [3, 6]
// ]

let b = [
  ["あ", "い"],
  ["か", "き"],
  ["さ", "し"]
].transpose()
// b: [
//   ["あ", "か", "さ"],
//   ["い", "き", "し"]
// ]

さいごに

細かくいじらない汎用的なコードは可読性よりもコンパクトさを優先してます

Thanks

  • @ensan_hcl : 汎用化されたコードの提供
1
2
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2