配列で特定の順番の値のみを削除するやり方がわかりません。
例えば、
right = [0,1,2,4,3,2,5,5,...,n]
という配列の、4の倍数の順番での値(上の配列だと4,5)のみを削除するにはどうすれば良いのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答2件
0
swift
1right.enumerated().filter { ($0.offset + 1) % 4 != 0 }.map { $0.element }
######説明
要素自体ではなくindexに対する条件が必要なため、まずenumerated()
でoffsetを持った状態に変換し、offsetを用いてfilter
をかけ、不要なoffsetを削除しています。
enumerated()
は配列の要素に0
から始まるoffsetを付加したタプルの配列を返します。
例
swift
1let a = ["a", "b", "c"] 2let b = a.enumerated() 3// [(offset: 0, element: "a"), (offset: 1, element: "b"), (offset: 2, element: "c")] 4// このような配列を返す。(実際にはちょっと違いますが。)
filter
は条件に合致する要素のみで構成された配列を返します。
最後のmap
でタプルから必要な要素のみを取り出しています。
投稿2017/10/21 08:05
総合スコア3384
0
ベストアンサー
高階関数を使わない方法を書いておきます。
今回のような配列から要素を削除する処理の場合、前から消していくとインデックスがずれてしまって上手くいかないので、後ろから消していきます。(コード中ではreversed()
で逆順にしています)
swift
1var right = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17] 2for index in stride(from: 3, to: right.count, by: 4).reversed() { 3 print(index) //チェック用 4 right.remove(at: index) 5} 6print("right =", right)
出力
15 11 7 3 right = [0, 1, 2, 4, 5, 6, 8, 9, 10, 12, 13, 14, 16, 17]
15,11,7,3と、後ろから順に削除されているのが分かると思います。
投稿2017/10/23 02:53
総合スコア16731
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/24 02:02
2017/10/24 02:21
2017/10/24 02:26
2017/10/24 02:35
2017/10/24 02:40
2017/10/24 02:58
2017/10/24 03:01
2017/10/24 03:03
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/10/23 02:22