我想从Hash
的末尾删除不必要的Array
,就像String#strip
一样,所以我这样写了:
a = [{date: Date.today, foo: nil},
{date: Date.today - 1, foo: 1},
{date: Date.today - 2, foo: 8},
{date: Date.today - 3, foo: nil},
{date: Date.today - 4, foo: nil},
{date: Date.today - 5, foo: 7},
{date: Date.today - 6, foo: nil}
]
a.reverse.each do |v|
v[:foo].nil? ? a.pop : break
end
此代码可以正常工作。
=> [{:date=>Tue, 24 Feb 2015, :foo=>nil},
{:date=>Mon, 23 Feb 2015, :foo=>1},
{:date=>Sun, 22 Feb 2015, :foo=>8},
{:date=>Sat, 21 Feb 2015, :foo=>nil},
{:date=>Fri, 20 Feb 2015, :foo=>nil},
{:date=>Thu, 19 Feb 2015, :foo=>7}]
但是可以在Array#pop
中拨打Enumerable#each
吗?
我觉得在循环中更改数组本身是不安全的。