Ruby on rails 通过另一个字符串数组对字符串进行自定义排序-Ruby
我有一个数组,目前按字母顺序排序,我正试图按字符串的手动顺序进行排序 当前代码:Ruby on rails 通过另一个字符串数组对字符串进行自定义排序-Ruby,ruby-on-rails,arrays,ruby,string,sorting,Ruby On Rails,Arrays,Ruby,String,Sorting,我有一个数组,目前按字母顺序排序,我正试图按字符串的手动顺序进行排序 当前代码: list = ["gold","silver","bronze","steel","copper"] list = list.sort { |a, b| a <=> b } 产量:铜、银、金、铜、钢 这可能吗?当前遇到以下错误消息: comparison of Integer with nil failed comparison of String with String failed 您可能只需
list = ["gold","silver","bronze","steel","copper"]
list = list.sort { |a, b| a <=> b }
产量:铜、银、金、铜、钢
这可能吗?当前遇到以下错误消息:
comparison of Integer with nil failed
comparison of String with String failed
您可能只需要创建一个奖牌等级或类似的等级,使用数字等级和字符串名称,然后根据等级进行排序。像这样
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}
您可能只需要创建一个奖牌等级或类似的等级,使用数字等级和字符串名称,然后根据等级进行排序。像这样
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}
我假设:
的每个元素都是按列表
李>排序的
可能包含不在排序顺序
李>列表中的元素
可能包含重复项;及列表
不包含重复项排序顺序
sort\u order
最初包含重复项,则临时数组sort\u order.uniq
可用于计算
请注意,如果如示例中所示,list
不包含重复项,并且sort\u order
不包含除list
中的元素以外的其他元素,则按照sort\u order
中的元素顺序对list
进行排序很简单,因为它只返回sort\u order
以下方法比使用sort
或sort\u by
的方法更有效(O(n)
与O(n*log(n)
)计算复杂度比较。)
我假设:
的每个元素都是按列表
李>排序的
可能包含不在排序顺序
李>列表中的元素
可能包含重复项;及列表
不包含重复项排序顺序
sort\u order
最初包含重复项,则临时数组sort\u order.uniq
可用于计算
请注意,如果如示例中所示,list
不包含重复项,并且sort\u order
不包含除list
中的元素以外的其他元素,则按照sort\u order
中的元素顺序对list
进行排序很简单,因为它只返回sort\u order
以下方法比使用sort
或sort\u by
的方法更有效(O(n)
与O(n*log(n)
)计算复杂度比较。)
sort\u order.每个带有索引的\u.to\u h
?一次生成count
表。但这会生成=>{“青铜”=>0,“银”=>1,“金”=>2,“铜”=>3,“钢”=>4}
。我需要{“gold”=>2,“copper”=>2,“silver”=>1,“steel”=>1}
。我想你比我更了解这个问题,因为这个问题本身对我来说没有意义。排序。每个都有索引。一次生成count
表。但这会生成{brown”=>0,“silver”=>1,“gold”=>2,“copper”=>3,“钢”=>4}
。我需要{“金”=>2,“铜”=>2,“银”=>1,“钢”=>1}
。我想你比我更了解这个问题,因为这个问题本身对我来说没有意义。