質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

Q&A

解決済

1回答

549閲覧

Swift 配列から要素を削除した後、削除前の配列に戻したい

aonekox_63

総合スコア2

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

配列

配列は、各データの要素(値または変数)が連続的に並べられたデータ構造です。各配列は添え字(INDEX)で識別されています。

0グッド

0クリップ

投稿2020/07/17 07:16

300枚のカードを使ったトレーニングアプリを開発中です。6枚のカードをランダムに表示し解答させ、10試行1セットを繰り返すというものです。

300要素の配列から6要素を取り出し、6要素は元の配列から削除するというコードを書いたところ、試行を繰り返すと配列の要素の数が0になり落ちてしまいます。

1問ごとに元に戻すことはできると思うのですが、10試行1セット終わった時点で削除前の配列に戻すことは可能でしょうか?

イメージ説明
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

難しく考えず、「オリジナルの配列」を用意し、別の変数にコピーし、手持ちが切れたらコピーし直す(別の言い方をすれば「補充する」)ような流れにすればいいかと思いますが、いかがでしょうか。

Swift

1import UIKit 2 3let cardOrig = (1...18) 4// (ClosedRange<Int>) 型でなく [Int] にするのであれば 5//let cardOrig = (1...18).map { $0 } 6 7// たとえば10回繰り返し 8for i in 0..<10 { 9 print("第(i + 1)試行") 10 // オリジナルからコピーするついでにシャッフルする 11 var card = cardOrig.shuffled() 12 13 while card.count > 0 { 14 let newCard = card.prefix(6) 15 card.removeFirst(6) 16 17 print(newCard, "残り(card.count)枚") 18 } 19 print() 20}

アプリの作りやすさから考えると、手持ち札を管理する構造体などを作った方が見通しはいいかもしれません。
1ヶ月前くらいの別の方のご質問に別の方が答えていましたが、見つかったら追記します。

投稿2020/07/17 07:39

TsukubaDepot

総合スコア5086

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aonekox_63

2020/07/18 08:05

煮詰まっていたところ新しい視点をくださりありがとうございます。超初心者のため自分のコードにするのにもう少し時間がかかりそうですが、考え方は理解できました。また分からなくなったらお聞きするかもしれません。
TsukubaDepot

2020/07/18 10:02

実際に作られたコードを拝見しないとなんとも言えない部分もありますので、もしよろしかったら全体のコードを(できれば新しい質問として)提示していただければ、ご回答できるかもしれません。 ちなみに、1ヶ月くらい前のべつの質問は、ちょっと内容が異なっていたようで、そのままではつかえないかもしれません。
aonekox_63

2020/07/22 12:53

オリジナルの配列とは別にコピーを作り、shuffledを使うことで解決しました。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問