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

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

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

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

Swift

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

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

Q&A

解決済

1回答

3723閲覧

Swift リストから値を取り出す。(ガチャ的なもの)

souroppy

総合スコア44

Xcode

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

Swift

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

Swift 2

Swift 2は、Apple社が独自に開発を行っている言語「Swift」のアップグレード版です。iOSやOS X、さらにLinuxにも対応可能です。また、throws-catchベースのエラーハンドリングが追加されています。

0グッド

1クリップ

投稿2016/07/09 05:43

リストを作って、その一つ一つに確率を決め、それをランダムで取り出してくるというプログラムを作りたいのですが、自分で調べてみてもわからないので、教えてください。

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

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

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

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

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

guest

回答1

0

ベストアンサー

参考にした記事は以下(コードは多少変更しています)
確率に準じてランダムに抽出する方法(PHP)

swift

1// firstが10%, secondが20%, thirdが70%の確率 2let array = [["text": "first","per": 10],["text": "second","per": 20],["text": "third","per": 70]] 3 4var target = Int(arc4random_uniform(100) + 1) 5 6// resultに選ばれた文字列が入ります 7let result = array.reduce("") { (str, value) -> String in 8 9 if !str.isEmpty { 10 return str 11 } 12 13 if let val = value["per"] as? Int where target >= val { 14 target -= val 15 return str 16 } else { 17 return value["text"] as! String 18 } 19}

Playground検証用

swift

1let array = [["text": "first","per": 10],["text": "second","per": 20],["text": "third","per": 70]] 2 3var results: [String] = [] 4 5// 100回実行 6for i in 0...99 { 7 8 var target = Int(arc4random_uniform(100) + 1) 9 10 let result = array.reduce("") { (str, value) -> String in 11 12 if !str.isEmpty { 13 return str 14 } 15 16 if let val = value["per"] as? Int where target >= val { 17 18 target -= val 19 return str 20 } else { 21 22 switch value["text"] as! String { 23 case "first": 24 return "first" 25 case "second": 26 return "second" 27 case "third": 28 return "third" 29 default: () 30 } 31 } 32 33 print("abc") 34 return str 35 } 36 results.append(result) 37}

だいたいそれっぽい(^_^)
s

投稿2016/07/09 08:39

編集2016/07/09 08:40
_Kentarou

総合スコア8490

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問