Swiftで配列内の指定範囲を上書きする
Swift で配列の特定の範囲を別の内容で上書きするには replaceSubRange というメソッドを使います。
Java でいうところの System.arraycopy
っぽいことをしたかったのですが、なかなか検索で出てこなかったのでメモ。
使い方
replaceSubRange 自体は文字列の置換操作の内容として紹介されている記事をいくつか見ました。
それと同じ使い方で、通常の配列の操作にも使うことができます。
第一引数は Range を、第二引数に上書きする別の配列を指定するのが基本的な使い方です。
サンプル 1 配列内の指定範囲を別の配列で上書き
サンプルコード
1 2 3 4 5 6 7 |
var target = [0, 1, 2, 3, 4] let toReplace = [20, 30] print("original: \(target)") target.replaceSubrange(2...3, with: toReplace) print("replaced: \(target)") |
出力
1 2 3 |
original: [0, 1, 2, 3, 4] replaced: [0, 1, 20, 30, 4] |
サンプル 2 配列内の指定範囲を 0 埋め
サンプルコード
1 2 3 4 5 6 |
var target = [0, 1, 2, 3, 4] print("original: \(target)") target.replaceSubrange(2...3, with: repeatElement(0, count: 2)) print("replaced: \(target)") |
出力
1 2 3 |
original: [0, 1, 2, 3, 4] replaced: [0, 1, 0, 0, 4] |
サンプル 3 上書き内容が Range の長さと一致しなくても良い
第一引数の Rangeの長さと、第二引数の配列長が一致しなくても問題なく、replaceSubrange メソッド呼び出し時にレシーバの配列が勝手に伸縮します。
サンプルコード
1 2 3 4 5 6 7 |
var target = [0, 1, 2, 3, 4] let toReplace = [20, 20, 20, 20, 30] print("original: \(target)") target.replaceSubrange(2...3, with: toReplace) print("replaced: \(target)") |
出力
1 2 3 |
original: [0, 1, 2, 3, 4] replaced: [0, 1, 20, 20, 20, 20, 30, 4] |
参考サイト
Apple 公式の replaceSubrange のページ
Swift 3のRange徹底解説。Range の使い方がすごく良くまとめられています。
最後まで読んでいただきありがとうございます。 このブログを「いいな」と感じていただけましたら、Twiter にてフォローいただけるとうれしいです。ブログ更新情報などもお届けします。
Follow @ryuta461
この記事をシェアする