gpt4 book ai didi

arrays - ruby 在数组中排序哈希

转载 作者:太空宇宙 更新时间:2023-11-03 17:45:09 25 4
gpt4 key购买 nike

我有一个散列数组,我想根据 :reference 值对其进行排序。但是数组中的某些元素没有 :reference 键,因此无法排序。有没有办法忽略这个字段,只对包含这个键的哈希元素进行排序?

我尝试了以下方法,但出现参数错误

ArgumentError: comparison of NilClass with String failed
sort_by at org/jruby/RubyEnumerable.java:503



arr1 = [{:reference=> "F123",
:name=> "test4"
},
{
:reference=> "ZA4",
:name=> "test3"
},
{
:reference=> "A43",
:name=> "test2"
},
{
:name=> "test1"
},
{
:name=> "homework1"
}]

arr1 = arr1.sort_by { |hash| hash[:reference] }

puts arr1

正确的输出应该是这样的:

=> arr1= [
{:reference=>"A43", :name=>"test2"},
{:reference=>"F123", :name=>"test4"},
{:reference=>"ZA4", :name=>"test3"},
{:name=> "test1"},
{:name=> "homework1"}
]

最佳答案

您只能对可以比较的值进行排序,因此如果您有不同类型的值,最好先将它们转换为相同类型。一个简单的解决方法是转换为字符串:

arr1.sort_by { |hash| hash[:reference].to_s }

您还可以指定一个默认值:

arr1.sort_by { |hash| hash[:reference] || '' }

编辑:如果您希望将 nil 值排在最后:

arr1.sort_by { |hash| [ hash[:reference] ? 0 : 1, hash[:reference].to_s ] }

关于arrays - ruby 在数组中排序哈希,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40004918/

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