gpt4 book ai didi

arrays - Ruby - 根据数组顺序对哈希值数组(字符串)进行排序

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

我有一个格式如下所示的散列数组,我正在尝试根据单独的数组对散列的 :book 键进行排序。该顺序不是按字母顺序排列的,对于我的用例,它不能按字母顺序排列。

我需要根据以下数组进行排序:

array = ['Matthew', 'Mark', 'Acts', '1John']

请注意,我见过几种利用 Array#index(例如 Sorting an Array of hashes based on an Array of sorted values)执行自定义排序的解决方案,但不适用于字符串。

我尝试了使用 Array#sortArray#sort_by 进行排序的各种组合,但它们似乎不接受自定义顺序。我错过了什么?预先感谢您的帮助!

哈希数组

[{:book=>"Matthew",
:chapter=>"4",
:section=>"new_testament"},
{:book=>"Matthew",
:chapter=>"22",
:section=>"new_testament"},
{:book=>"Mark",
:chapter=>"6",
:section=>"new_testament"},
{:book=>"1John",
:chapter=>"1",
:section=>"new_testament"},
{:book=>"1John",
:chapter=>"1",
:section=>"new_testament"},
{:book=>"Acts",
:chapter=>"9",
:section=>"new_testament"},
{:book=>"Acts",
:chapter=>"17",
:section=>"new_testament"}]

最佳答案

您可以使用 sort_byindex

arr = [{a: 1}, {a: 3}, {a: 2}] 

order = [2,1,3]

arr.sort_by { |elem| order.index(elem[:a]) }
# => [{:a=>2}, {:a=>1}, {:a=>3}]

您可以通过索引要排序的元素列表来使其稍微快一些:

order_with_index = order.each.with_object.with_index({}) do |(elem, memo), idx|
memo[elem] = idx
end

然后代替 order.index(<val>)使用 order_with_index[<val>]

关于arrays - Ruby - 根据数组顺序对哈希值数组(字符串)进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40121932/

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