【问题标题】:Mapping and selecting at the same time同时映射和选择
【发布时间】:2012-04-06 13:17:21
【问题描述】:

有没有同时map和(selectdelete_if)的好方法?目前,我执行以下任一操作,但想知道是否有更好的方法。另外,如果我想要结果数组中的假值,我不能使用第二个。

some_array.select{|x| some_condition(x)}.map{|x| modification(x)}

some_array.map{|x| modification(x) if some_condition(x)}.compact

【问题讨论】:

标签: ruby arrays map enumerable ruby-1.9.3


【解决方案1】:

减少或注入几乎相同

new_array = some_array.each_with_object([]) do |m,res|
  res << modification(x) if some_condition(x)
end

不同之处在于你不需要将结果放在块的末尾。

【讨论】:

  • 不知道 each_with_object。整洁!
  • 在这里查看:ruby-doc.org/core-1.9.3/…
  • rails console 中有效,但在irb 中无效。 OP正在询问纯红宝石。你确定这个方法存在于纯红宝石中吗?它适用于哈希。
  • 我给你发了一个纯红宝石的链接,但我编辑了好几次,所以请再检查一遍。
  • 顺便说一句,我没有撤消你的回答
【解决方案2】:

这个怎么样?

new_array = some_array.inject([]) do |arr, x|
  some_condition(x) ? arr << modification(x) : arr
end

每当我想到映射然后选择或映射然后拒绝等...,这通常意味着我可以使用enumerable 来完成工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-05
    • 2016-03-27
    • 2018-03-10
    相关资源
    最近更新 更多