【问题标题】:map method with mutated iterator带有变异迭代器的 map 方法
【发布时间】:2019-10-31 05:40:24
【问题描述】:

我有一个我想用 map 遍历的对象数组-

object_array.map {|o| o.dostuff }

但我想让 o 迭代器成为对象的字符串表示,所以我必须做这样的事情-

object_array.map do |o|
  o = o.to_s
  o.dostringstuff
end

有什么方法可以在一行中完成吗? (解释器不接受这个)

object_array.map {|o.to_s| o.dostringstuff }

【问题讨论】:

  • 你为什么更喜欢选择的答案,它需要一次遍历数组,一次遍历映射数组,并创建一个临时数组,而不是@Draco 的答案,这需要一次遍历而不是创建一个临时数组?

标签: ruby enumerable


【解决方案1】:

为什么不链接maps,尤其是shorthand syntax via Symbol#to_proc

object_array.map(&:to_s).map(&:dostringstuff)

【讨论】:

  • 还没想过。它确实在一行中解决了它,但它迭代了两次而不是仅一次。
  • @Akra 是的,确实如此,但是由于您的数据无论如何都需要转换,因此无论您要对每个元素执行多项操作。问题是什么时候。
【解决方案2】:

有什么问题:

object_array.map{|o| o.to_s.dostringstuff }

?

【讨论】:

  • 假设我必须做几个与字符串相关的操作,所以它会导致 o.to_s[o.to_s.index(someindex)..o.to_s.rindex(otherindex) ] 如果 s.to_s.match(someexpression)
  • @Akra 那你的数据有误;您应该按照您想要的方式对其进行映射,因为映射是“主要”操作,而数据转换只是辅助工作,因此您可以做您真正想做的事情。
  • 然后object_array.map(&:to_s) 首先按照@BrightOne 的建议
  • Akra,你的问题很清楚。您的评论与另一个问题有关。这个答案是获得预期结果的最直接、最经济的方法。如果您还有其他问题,请单独提交。
猜你喜欢
  • 2011-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-05-15
  • 2014-09-20
  • 2015-11-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多