LoginSignup
2
2

More than 5 years have passed since last update.

Arrayを複数回す際に役立ちそうなこと

Last updated at Posted at 2017-06-06

2つのArrayを回して値を取り出したい
アプリの履歴管理とかはstructでまとめてArrayにするのが定石だけど
例えばファイルをリネームするときにわざわざstructを作りたくないのでタプルで回す

普通にやると

let items = try! FileManager.default.contentsOfDirectory(atPath: path)
let renamedItems = items.map{$0.replace("aaa",with:"bbb")}
let tuples = [(String,String)]
for i in items.count-1 {
   tuples.append(items[i], renamedItems[i])
}
tuples.forEach{
   ...
}

となり少し冗長、できればループはメソッドチェーンでやりたい。

タプルで回す

Arrayにextensionで実装


extension Array{
    func tupled<T>(_ items:[T])->[(Element,T?)]{return self.enumerated().map{($1,items.index(at: $0))}}
    func index(at index:Int)->Element?{return index >= 0 && index < self.count ? self[index] : nil}
}


let items = try! FileManager.default.contentsOfDirectory(atPath: path)
let renamedItems = items.map{$0.replace("aaa",with:"bbb")}
items.tupled(renamedItems).forEach{atPath,toPath in
    guard let toPath = toPath else {return}
    try! FileManager.default.moveItem(atPath: atPath, toPath: toPath)
}

満足...  (スナネコ) CzdtZdRUoAAc1LT.jpg

2
2
0

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
2
2