ruby-on-rails - rails : How to sort/re-order an OrderedHash

标签 ruby-on-rails sorting hash

我有一个 OrderedHash,从答案 here 生成看起来像这样:

<OrderedHash {2=>"534.45",7=>"10",153=>"85.0"}>

所以,我需要按第二个值按降序对哈希进行排序。我试过这个:
var.sort! {|a,b| b[1] <=> a[1]}
NoMethodError: undefined method `sort!' for #<ActiveSupport::OrderedHash:0x127a50848>

如何重新排序此 OrderedHash?

最佳答案

好吧,我想你可以简单地使用 :order => 'sum_deal_price ASC'sum调用原始答案。

但是你也可以用 Ruby 来做,只是有点棘手:

# You can't sort a Hash directly, so turn it into an Array.
arr = var.to_a  # => [[2, "534.45"], [7, "10"], [153, "85.0"]]
# Looks like there's a bunch of floats-as-strings in there, fix that.
arr.map! { |pair| [pair.first, pair.second.to_f] }
# Now sort it by the value (which is the second entry of the pair).
arr.sort! { |a, b| a.second <=> b.second }
# Turn it back into an OrderedHash.
sorted_hash = ActiveSupport::OrderedHash[arr]

关于ruby-on-rails - rails : How to sort/re-order an OrderedHash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4317550/

相关文章:

ruby-on-rails - 如何将 *args 与默认选项哈希合并?

mysql - rails 服务器中的数据库存储在哪里?

ruby-on-rails - Rails:ActiveRecord::Base.transaction 和 MyClass.transaction 有什么区别?

java - 为什么当我反转冒泡排序算法中的比较符号时,生成的排序列表不会反转?

Java:将重复的对象添加到集合中?

ruby-on-rails - Ruby 嵌套数组项的新独特数组

java - 比较方法(compareTo)在不同的JVM中返回不同的结果

php - 如何将PHP排序替换为SQL?

java - 为什么不为字符串散列表简单地使用此Collision-Less函数呢? (包括在下面)

java - 为什么 Guava 布隆过滤器的性能这么差?