リストを作って、その一つ一つに確率を決め、それをランダムで取り出してくるというプログラムを作りたいのですが、自分で調べてみてもわからないので、教えてください。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答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}
投稿2016/07/09 08:39
編集2016/07/09 08:40総合スコア8490
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。