加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails:如何对OrderedHash进行排序/重新排序

发布时间:2020-12-16 23:26:19 所属栏目:百科 来源:网络整理
导读:我有一个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::Ord
我有一个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’在原始答案的总和调用中.

但你也可以在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]

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读