【问题标题】:How to sort a hash with a value inside it如何对其中包含值的哈希进行排序
【发布时间】:2020-02-07 12:27:46
【问题描述】:

我有一个哈希

H = { abc: [1,1,2], def: [0,1,1], efg: [3,4,7] }

如何使用数组的最后一个索引对这些进行降序排序,即我需要哈希像这样H = { efg: [3,4,7], abc: [1,1,2], def: [0,1,1]}

H.values[2].sort

【问题讨论】:

  • 实际上我希望它被排序散列以保留里面的数据..让我重新构建它。假设我有 5 名学生的数据。偶数 sem 和奇数 sem 中的积压和总积压。键是学生的名字说“abc”,值是一个列表,在奇数 sem、偶数 sem 和总 [0,1,1] 中积压......哈希的每个元素就像“abc”=> [0,1 ,1] 我需要订购它,以便我首先获得积压最多的学生,然后是第二个

标签: ruby sorting hash ruby-on-rails-5


【解决方案1】:

您可以将其转换为数组,然后再转换回哈希:

x = {a: [1,2,3], c: [7,8,9], b: [4,5,6]}
x.sort_by { |k,v| v.last }.reverse.to_h
# => {:c=>[7, 8, 9], :b=>[4, 5, 6], :a=>[1, 2, 3]}

sort_by 将其转换为元组数组:

x.sort_by { |k,v| v.last }
# => [[:a, [1, 2, 3]], [:b, [4, 5, 6]], [:c, [7, 8, 9]]]

当然可以拨打.reverse获取降序

你可以在这个数据结构上调用.to_h再次做一个哈希。

虽然将哈希视为有序结构并不正常,但我认为它们确实保留了顺序,但通常如果您使用有序数据,您会将其保留为数组。我会质疑你为什么需要使用有序哈希。

【讨论】:

  • ...或x.sort_by { |k,v| -v.last }.to_h
  • @CarySwoveland true :D
  • 实际上我希望它被排序为哈希以保留里面的数据。我认为你不理解我的问题让我重新构建它。假设我有 5 名学生的数据。偶数 sem 和奇数 sem 中的积压和总积压。键是学生的名字说“abc”,值是一个列表,在奇数 sem、偶数 sem 和总 [0,1,1] 中积压......哈希的每个元素就像“abc”=> [0,1 ,1] 我需要订购它,以便我首先获得积压最多的学生,然后是第二位。
  • @NirmalBhakat 什么是“sem”?无意冒犯,但你的语言不是很清楚。
  • @NirmalBhakat:“这样我才能让积压最多的学生排在第二位”——这个答案中的代码就是这样做的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-03-10
  • 1970-01-01
  • 1970-01-01
  • 2021-08-22
  • 2011-02-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多