我是Ruby的新手,有人能帮我吗?
我有一些产品数据Json,我需要按有效期排序,但是到目前为止,我用.sort_by尝试过的所有东西都有错误。
Json采用以下格式
{"wh_Repeating":[
{
"wh": {
"Item_Number": "111166",
"Expiry_Date": "2023-05-05"
}
},
{
"wh": {
"Item_Number": "111167",
"Expiry_Date": "2023-05-01"
}
},
{
"wh": {
"Item_Number": "111168",
"Expiry_Date": "2023-05-09"
}
}]}
在Ruby中显示为
{:wh_Repeating=>[
{:wh=>{:Item_Number=>"111166", :Expiry_Date=>"2023-05-05"}},
{:wh=>{:Item_Number=>"111167", :Expiry_Date=>"2023-05-01"}},
{:wh=>{:Item_Number=>"111168", :Expiry_Date=>"2023-05-09"}}
]}
尝试alsort最近的尝试是
sorted = jsonIn["wh_Repeating"]
sorted.sort_by { |k,v| v[:"Expiry_Date"] }
puts sorted
这给了我未定义的nil方法'sort_by':NilClass(NoMethodError)(异常)
3条答案
按热度按时间fykwrbwg1#
哈希键是符号而不是字符串。
jsonIn["wh_Repeating"]
应为jsonIn[:wh_Repeating]
同样,
sorted.sort_by { |k,v| v[:"Expiry_Date"] }
不会突变sorted
。sort_by
不会改变接收器。换句话说,sorted
的值保持不变。有一个bang版本(sort_by!
)会改变(一个副作用),但不鼓励使用改变函数。这是你想做的。
sshcrbum2#
我会这样做:
6mzjoqzu3#
我假设原始哈希值(下面的
h
)不会被变异(修改)。由于此哈希值只有一个键(
:wh_Repeating
),我们可以简单地将所需哈希值的结构写为然后计算
:wh_Repeating
的值。原始散列
h
未改变,这可以容易地验证。