gpt4 book ai didi

ruby - 先按值排序散列,然后按键排序

转载 作者:数据小太阳 更新时间:2023-10-29 07:44:47 26 4
gpt4 key购买 nike

我有一个哈希 [原文如此]:

[
["a", 1],
["b", 1],
["d", 1],
["k", 1],
["r", 1],
["f", 2],
["j", 2],
["o", 2],
["i", 3],
["s", 3]
]

我希望输出按数字从小到大排序,然后按字母倒序排序:

[
["r", 1],
["k", 1],
["d", 1],
["b", 1],
["a", 1],
["o", 2],
["j", 2],
["f", 2],
["s", 3],
["i", 3]
]

有办法吗?

这是我的代码:

def letter_counts(word)
my_hash = Hash.new(0)
word.split("").each{|word| my_hash[word] += 1}
my_hash.sort_by{|key,value| [value, key]}
end

最佳答案

按最后一个元素(整数)对数组中的元素进行分组,通过按每个组的第一个元素对它们进行排序来映射它们,然后反转:

def hsort(array)
array.group_by(&:last).flat_map { |_, v| v.sort_by(&:first).reverse }
end

p hsort([["a", 1], ["b", 1], ["d", 1], ["k", 1], ["r", 1], ["f", 2], ["j", 2], ["o", 2], ["i", 3], ["s", 3]])
# [["r", 1], ["k", 1], ["d", 1], ["b", 1], ["a", 1], ["o", 2], ["j", 2], ["f", 2], ["s", 3], ["i", 3]]
p hsort([["e", 1], ["b", 1], ["d", 1], ["k", 1], ["r", 1], ["f", 2], ["j", 2], ["o", 2], ["i", 3], ["s", 3]])
# [["r", 1], ["k", 1], ["e", 1], ["d", 1], ["b", 1], ["o", 2], ["j", 2], ["f", 2], ["s", 3], ["i", 3]]

关于ruby - 先按值排序散列,然后按键排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49885929/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com