Вы можете просто создать класс медалей или что-то подобное с числовым рангом и строковым именем, а затем просто отсортировать по рангу.вот так.
class Medal
attr_accessor :name, :rank
def initialize(name, rank)
@name = name
@rank = rank
end
end
list = [Medal.new("gold", 0), Medal.new("silver", 1), Medal.new("bronze", 2), Medal.new("steel", 4), Medal.new("copper", 3)]
list = list.sort_by &:rank
Вы можете сделать это намного дальше, если хотите, и определить карту имен медалей для рангов, чтобы сбросить ранг с инициализации.Вы также можете просто определить каждую медаль как константу, если хотите, поскольку у вас, вероятно, будет только фиксированный список.
Но если вы не хотите этого делать, то, возможно, у вас также может быть просто список.порядка и сортировки по индексу, вот так
list = ["gold","silver","bronze","steel","copper"]
sort_order = ["bronze","silver","gold","","copper","steel"]
list = list.sort_by {|m| sort_order.index m}