2016-07-06 11 views
-3

if firstnumber==secondnumber && secondnumber==thirdnumberを実行できるように、最初の2番目の結果と3番目の結果を探したいと思います。どのように結果にその数字があるのでしょうか?Array.collectから特定の番号を見つける

numbers = 3.times.map { Random.new.rand(0..10000) } 

prizes = numbers.map do |x| 
    case x 
    when 1..3000 
    [ '7', 10000 ] 
    when 3001..6000 
    [ "Cherries", 500 ] 
    when 6001..10000 
    [ "Diamond", 400 ] 
    end 
end 

puts "Your results are: #{prizes.collect { |p| p[0] }.join(", ")}! 

私はp [0] [0]を使用しようとしましたが、最初の文字が代わりに使用されました。

+1

それが所望の出力が含まれている場合あなたの質問は明確であるかもしれません。 –

+1

「[mcve]」をお読みください。期待される成果が必要です。どのようにして問題を解決しようとしたのかはわかりません。試してみる前に尋ねるのではなく、試してみてください。 –

+1

これらの種類のゲームについて注記しておきたいことは、賞金支払いはパターンに依存するということです。たとえば、「7,7,7」は1つの「7」よりも実質的に「7」に支払うことになります。 – tadman

答えて

2

言うなら:

results = prizes.collect { |p| p[0] } #=> ["Diamond", "Cherries", "7"] 

が次にそれぞれの結果で取得するために次の手順を実行します

results[0] #=> "Diamond" 
results[1] #=> "Cherries" 
results[2] #=> "7" 

ます。また、最初の要素を取得するためにresults.firstを使用することができます。あなたがRailsの中で作業をすることが起こる場合も、次の操作を行うことができます。

results.second #=> "Cherries" 
results.third #=> "7" 
1

はここでこれを行うには罰金方法です:

numbers = 3.times.map { Random.new.rand(0..10000) } 

prizes = numbers.map do |x| 
    case x 
    when 1..3000 
    { name: '7', val: 10000 } 
    when 3001..6000 
    {name: "Cherries", val: 10000 } 
    when 6001..10000 
    {name: "Diamond", val: 400 } 
    end 
end 

# You could replace 'map' with 'collect' here and have the same results 
prizes_string = prizes.map { |p| "#{p[:name]}: #{p[:val]}" }.join(" and ") 

puts "Your results are: #{prizes_string}!" 
+1

誤った名前のビット: 'prizes_string'は実際には文字列の配列です。 – tadman

+0

@tadman \t true、私はそれを修正しました –

+1

ハッシュを使って物事を整然としたやり方で保存するのはかなりうまくいきますが、そのような小さな例ではもっと冗長になります。引数を展開することもできます: 'prizes.map {| name、val | ...} 'を使用します。 – tadman

関連する問題