【问题标题】:Sort an array that has normal string elements and "number-like" string elements对具有普通字符串元素和“类似数字”的字符串元素的数组进行排序
【发布时间】:2016-01-19 21:45:33
【问题描述】:

我有一个数组,其中包含像 "4.5" 这样的浮点型字符串和像 "Hello" 这样的常规字符串。我想对数组进行排序,以便常规字符串排在最后,类似浮点的字符串排在它们之前,并按它们的浮点值排序。

我做到了:

@arr.sort {|a,b| a.to_f <=> b.to_f }

【问题讨论】:

标签: arrays ruby string sorting


【解决方案1】:
arr = ["21.4", "world", "6.2", "1.1", "hello"]

arr.sort_by { |s| Float(s) rescue Float::INFINITY }
  #=> ["1.1", "6.2", "21.4", "world", "hello"]

【讨论】:

  • 如果您希望最后的字符串也进行排序,可以将其扩展为 [(Float(s) rescue Float::INFINITY), s]
【解决方案2】:

在 ruby​​ 1.9+ 中排序

["1.2", "World", "6.7", "3.4", "Hello"].sort

会回来

["1.2", "3.4", "6.7", "Hello", "World"]

您可以将@cary 解决方案用于某些极端情况,例如 ["10.0","3.2","hey","world"]

【讨论】:

  • ['10.0', '9.0', 'cat'] 呢?
  • 是的,它不起作用,但我使用了 op 给出的值“4.5”,并以此为基础回答。
【解决方案3】:

又快又脏:

arry = ["1", "world", "6", "21", "hello"]
# separate "number" strings from other strings
tmp = arry.partition { |x| Float(x) rescue nil }
# sort the "numbers" by their numberic value
tmp.first.sort_by!(&:to_f)
# join them all in a single array
tmp.flatten!

可能会满足您的需求

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-06
    • 2013-12-03
    • 2015-06-07
    • 1970-01-01
    • 2020-08-22
    • 2013-10-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多