如何使用哈希表创建名称和分数列表,并对它们进行排名?

时间:2019-01-28 19:56:19

标签: ruby hash ranking-functions

EX。乔90,迈克80,史蒂夫100。

我将如何打印以下内容?在Ruby中甚至可能吗?

Rank    Name    Score
1           Steve     100
2           Joe         90
3           Mike      80

任何帮助都非常感谢!

2 个答案:

答案 0 :(得分:0)

您可以使用each_with_index进行Ruby Hash的迭代

{ steve: 100, jeo: 90,mike: 80 }.each_with_index do |(key, value), index|
  puts "#{index}: #{key} => #{value}"
end

答案 1 :(得分:0)

正如评论中指出的那样,解决此问题的最直观方法是拥有一组用户,其中每个用户都用自己的哈希表示(这可能是您在问题中所指的)。 / p>

users = [
  { name: "Joe", score: 90 }, 
  { name: "Mike", score: 80 }, 
  { name: "Steve", score: 100 }
]

sorted_users = users.sort_by { |user| user[:score] }.reverse

puts "Rank   Name      Score"

sorted_users.each_with_index do |user, index|
  rank_str = (index + 1).to_s.ljust(7)
  name_str = user[:name].ljust(10)
  score_str = user[:score].to_s.rjust(5)
  puts "#{rank_str}#{name_str}#{score_str}"    
end

它将打印出以下内容

# Rank   Name      Score
# 1      Steve       100
# 2      Joe          90
# 3      Mike         80