【发布时间】:2016-02-21 16:41:46
【问题描述】:
假设我有一个数组:[{one: 1, two: 2}, {one: 5, two: 6}],我想使用 sort_by 类似的东西:
[1] pry(main)> [{one: 1, two: 2}, {one: 5, two: 6}].sort_by{|x| [x[:one], x[:two]]}
但是,当我为其中一个值引入 nil 时,我得到 ArgumentError: comparison of Array with Array failed :
=> [{:one=>1, :two=>2}, {:one=>5, :two=>6}]
[2] pry(main)> [{one: 1, two: 2}, {one: nil, two: 6}].sort_by{|x| [x[:one], x[:two]]}
ArgumentError: comparison of Array with Array failed
如何避免此错误?
【问题讨论】:
-
nil值应该出现在哪个位置?如果您想将它们视为0,就像在哈希访问中添加.to_i一样简单:x[:one].to_i(假设:所有值都是nil或整数) -
@tessi 只是想忽略该值,如果它是 nil,因为有时我需要这些值是文本或整数
-
“忽略”是什么意思。使用
[{one: nil, two: 5},{one: 3, two: 6}],结果应该是[{one: 3, two: 6}]吗? -
在现实生活中我有一个哈希数组,想像
array_of_hashes.sort_by{|e| [ e['description'].to_i, e['c_currency'].to_i, e['start_date'], e['maturity_date'] ] }一样使用它 -
然后我会做类似
[x[:a_string] || '', x[:some_date] || Date.today, ...的事情。因此,将|| <default_value>添加到每个哈希访问。这样你就可以控制nil值应该出现在哪个位置。
标签: ruby-on-rails ruby