如何在Ruby的Array类中修改map函数的实现

从东方

有没有办法修改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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章