2017-08-17 63 views
0

我正在爲這個小問題苦苦掙扎。我需要輪詢用戶的選舉輸入並輸出勝利者。使用Ruby創建一個簡單的選舉民意調查

輸入:投票10人進行投票。 輸出:打印總投票數和選舉贏家。

Example: 
    Election candidates are: Tom, James, Anne 

    Vote #1: <Anne> 
    Vote #2: <Anne> 
    Vote #3: <James> 
    Vote #4: <Tom> 
    Vote #5: <Tom> 
    Vote #6: <Anne> 
    Vote #7: <Anne> 
    Vote #8: <James> 
    Vote #9: <James> 
    Vote #10: <Anne> 

RESULTS.... 

    Vote Summary: 
    Anne - 5 vote(s) 
    James - 3 vote(s) 
    Tom - 2 vote(s) 

    WINNER: Anne! 

我在考慮用每個迭代器來填充用戶輸入的候選人的所有投票。像這樣:

(1..10).each do|i| 
puts "Vote##{i}: " + "<"+gets.chomp+">" 
end 

但是,我不知道如何找到每個候選人的總票數。任何建議將不勝感激。

+0

你需要的結果,在投票的順序打印? –

回答

1

您需要輸入的值存儲到一個散列,然後處理結果:

results = (1..10).each.with_object(Hash.new(0)) do |i, hash| 
    name = gets.chomp 
    hash[name] += 1 
    puts "Vote##{i}: <#{name}>" 
end 

puts "RESULTS...." 
puts "Votes Summary:" 

results.each do |name, votes| 
    puts "#{name} - #{votes} vote(s)" 
end 

winner = results.max_by(&:last) 

puts "WINNER: #{winner}!" 
+2

也可以執行'results.max_by(&:last)'而不是'results.to_a.max {| a,b | a [1] <=> b [1]}' –

+0

@SimpleLime謝謝,編輯 –