有没有办法修改Array类中的map()实现,使其仅影响数组的某些索引?
例:
a = [1, 2, 3, 4, 5]
a.map(2..4) { |x| x*2 }
现在,a = [1, 2, 6, 8, 10]
由于map函数仅用于索引2和3。
您可以(但实际上不应该)这样做:
Array.class_eval do
def map(range = nil)
return super() if range.nil?
return self[range].map unless block_given?
self[range].map { |x| yield x }
end
end
[1, 2, 3, 4, 5].map(2..4) { |x| x * 2 }
# => [6, 8, 10]
Ruby已经有了“仅选择某些索引”的更普通/更好/更好的方式,它具有arr[2..4]
:
arr = [1, 2, 3, 4, 5]
arr[2..4].map { |x| x * 2 }
# => [6, 8, 10]
我避免了上面的突变,但是如果您也必须这样做,则可以执行与上面类似的操作,而只需使用map!
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句