同时映射和选择

Posted

技术标签:

【中文标题】同时映射和选择【英文标题】: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

【问题讨论】:

类似问题:***.com/questions/5152098/… 但没有好的答案。 In Ruby, is there an Array method that combines 'select' and 'map'? 的可能副本 - 有更好的答案 【参考方案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 来完成工作。

【讨论】:

以上是关于同时映射和选择的主要内容,如果未能解决你的问题,请参考以下文章

同时过滤和映射

使用内存映射文件,同时允许其他进程完全访问

使用 Spring Security 在同一个 URI 映射上同时支持 Basic 和 Digest 身份验证

如何在 pandas 中使用 apply 函数,同时将索引映射到两个不同的数据帧?

Elasticsearch 父子映射:同时搜索并突出显示

驱动学习之静态映射和动态映射