gpt4 book ai didi

ruby - 按降序对字符串进行排序的方法(在复杂键中)

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

为了对字符串数组 a 进行降序排序,可以使用 reverse

a.sort.reverse

但是当你想在多个排序键中使用一个字符串时,这是无法做到的。假设 items 是具有属性 attr1 (String)、attr2 (String),attr3(整数)。排序可以像这样完成:

items.sort_by{|item| [item.attr1, item.attr2, item.attr3]}

通过将 -1-1 相乘,可以独立地为 Integer 完成从升序到降序的切换:

items.sort_by{|item| [item.attr1, item.attr2, -item.attr3]}

但是这样的方法对于String来说并不简单。可以定义这样的方法吗?当你想对 attr2 进行降序排序时,应该这样写:

items.sort_by{|item| [item.attr1, item.attr2.some_method, item.attr3]}

最佳答案

我认为您始终可以将字符串转换为整数数组 (ord)。像这样:

strings = [["Hello", "world"], ["Hello", "kitty"], ["Hello", "darling"]]
strings.sort_by do |s1, s2|
[
s1,
s2.chars.map(&:ord).map{ |n| -n }
]
end

附言:

由于@CarySwoveland 在这里遇到了一个带有空字符串的极端情况,可以用这个不优雅的解决方案来解决:

strings.sort_by do |s1, s2|
[
s1,
s2.chars.
map(&:ord).
tap{|chars| chars << -Float::INFINITY if chars.empty? }.
map{ |n| -n }
]
end

@Jordan 亲切地提到 sort_by使用 Schwartzian Transform所以你根本不需要预处理。

关于ruby - 按降序对字符串进行排序的方法(在复杂键中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35823535/

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