【发布时间】:2017-04-20 15:31:04
【问题描述】:
这里是 Ruby 初学者。最近碰到这个问题:
我的朋友约翰和我是“Fat to Fit Club (FFC)”的成员。 John 很担心,因为每个月都会发布一个包含成员权重的列表,并且每个月他都是列表中的最后一个,这意味着他是最重的。 我是建立名单的人,所以我告诉他:“别担心,我会修改名单的顺序”。决定将“权重”归因于数字。从现在开始,一个数字的权重将是其数字的总和。 例如,99 的“权重”为 18,100 的“权重”为 1,因此在列表中 100 将排在 99 之前。给定一个具有 FFC 成员权重的字符串以正常顺序排列,您可以给该字符串按“权重”排序吗?这些数字?
我试图解决这个问题:
def order_weight(strng)
new_strng = strng.split(" ").map! {|x| x.split(//)}.map! {|x| x.reduce {|sum, input| sum.to_i + input.to_i}}
output = strng.split(" ").zip(new_strng)
output.sort_by! {|x, y| [y, x]}
output.reduce("") {|memo, input| memo << input[0] + " "}.chop
end
order_weight("2000 10003 1234000 44444444 9999 11 11 22 123")
#=> "11 11 2000 10003 22 123 1234000 44444444 9999"
这似乎工作正常(如果有更简单的方法请告诉我)但我的问题是我收到:
#<ArgumentError: comparison of Array with Array failed>
我已经阅读了一些内容,发现这个问题可能是由于将 nil 值与 Enumerable#sort_by 进行比较而引起的,但据我所知,这里不应该是这种情况(?)
任何帮助将不胜感激
【问题讨论】:
-
每当您报告异常时,请包括引发异常的行。您还需要展示
string的外观。 -
我想我应该包含的另一条信息是,我只有在通过这些问题来自的网站(codewars)输入我的代码时才会收到此错误。这是一张图片来说明我的意思imgur.com/a/aqRkP。
-
别忘了有一个编辑按钮供您使用。
标签: ruby sorting enumerable