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

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

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

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

Q&A

解決済

2回答

739閲覧

配列からランダムに抽出して、別の配列にまとめる方法

Tsudanuma

総合スコア5

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

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

0グッド

0クリップ

投稿2020/08/30 23:29

swift

1let letters = ["a","b","c"] 2var result:[String] = [] 3for n in 0...7 { 4 func pickOne() { 5 letters.randomElement() 6 result.insert(HERE, at: n) 7 //ここでrandomizedLettersにlettersから選んで8こ文字を入れたい 8 } 9} 10let randomLetters = "(result[0])(result[1])(result[2])(result[3])(result[4])(result[5])(result[6])(result[7]))" 11print(randomLetters)

6行目に大文字でHEREと書いてある所に5行目で出した値を入れたいのですが、戻り値の扱いが難しく、うまくいきません。

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

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

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

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

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

guest

回答2

0

別のやり方として。

ArrayのrandomElement()メソッドは配列が空であったときのみnilを返しますので初めに配列が空でないかを確認しています。
エラー処理に関しては設計に合わせて変更してください。

swift

1guard !letters.isEmpty else { fatalError("元の配列が空") } 2 3let result = (1...8).map { _ in letters.randomElement()! }

force unwrapを使っていますが、ここに来る場合にはlettersが空でないことがわかっているので安全です。

投稿2020/08/31 02:08

MasakiHori

総合スコア3391

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

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

0

ベストアンサー

戻り値が難しい、というのは、おそらくrandomElement()の戻り値が Optional 型なので、次の行の insert(_:at:)でうまく使えない、ということだと解釈しています。

そうであれば、オプショナル値の扱いや、アンラップ、オプショナルバインディングをキーワードに調べ直していただく必要があるかと思います。

Swift

1let letters = ["a","b","c"] 2var result:[String] = [] 3for _ in 0...7 { 4 // オプショナルバインディングを行う 5 if let word = letters.randomElement() { 6 //result.insert(word, at: n) 7 // 末尾に追加するなら append 8 result.append(word) 9 } 10} 11print(result.joined())

ちなみに、ご質問のコードは関数の作成や利用という観点から見ると、for文の中で関数を宣言するなど、実用的な作りになっていませんので、その辺りも見直された方がいいかと思います。

投稿2020/08/31 00:44

TsukubaDepot

総合スコア5086

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問