【问题标题】:ruby sortby 3rd element in a multidimensional array npot working properlyruby 按多维数组中的第三个元素排序无法正常工作
【发布时间】:2011-02-21 12:01:59
【问题描述】:

我正在使用 ruby​​ 对数组进行排序,其中数组中的每个元素都是另一个数组。

我有这个:

Data = Data.SortBy { |Info| info[3] }

此列中的示例数据:

3.1
2
5.65
-1
0.4
-9.43
-10.87
-2.3

它应该把它分类成:

5.65
3.1
2
0.4
-1
-2.3
-9.43
-10.87

但结果是这样的:

5.65
3.1
2
0.4
-1
-10.87
-2.3
-9.43

它只是比较浮点数的第一个字符...而不是整数?

【问题讨论】:

  • 请修正您的代码。应该没有大写,它是sort_by,而不是SortBy。
  • 感谢您的时间和精力。你真的有帮助,你的回答解决了我的问题......哦等等......不,它没有:/没有必要如此迂腐和居高临下。
  • 我敢打赌你一直在对你的解析器说同样的话......
  • @Mladen Jablanović 感谢您的时间和精力。你真的有帮助:)哦等等......不,你没有。说真的,伙计……/我摇头
  • 如果您不提供允许人们重现问题的代码,他们就很难回答您的问题。

标签: ruby sorting multidimensional-array


【解决方案1】:

看起来它是按字母排序而不是按数字排序,这就是为什么“1”在“10”之前。

我假设 info 中的数据是字符串。如果是这样,您可以将它们转换为数字浮点数以进行排序操作:

data = data.sort_by{|info| info[3].to_f}

【讨论】:

  • 这很好用,我应该可以自己搞定。漫长的一天:)
  • 我有... 给予个人意见也不是不人道的。也许对你来说......它也没有让我在 5 分钟内完成......
  • 巨魔很多 LOLOLOLOLOL kthksbye
【解决方案2】:

正确的做法是:

array.sort_by {|elt| ary = elt.split("-").map(&:to_i); ary[0] + ary[1]}

简单来说,你可以看懂你的代码

array = [1,2,4,5,9]

array.sort do |a, b|
  b <=> a
end
# => [9,5,4,2,1]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-07
    • 1970-01-01
    • 2011-01-14
    • 1970-01-01
    • 1970-01-01
    • 2018-12-02
    • 2019-06-30
    • 1970-01-01
    相关资源
    最近更新 更多