gpt4 book ai didi

ruby - 映射一个只修改符合特定条件的元素的数组

转载 作者:数据小太阳 更新时间:2023-10-29 06:31:28 24 4
gpt4 key购买 nike

在 Ruby 中,以修改某些元素而其他元素保持不变的方式映射数组的最具表现力的方法是什么?

这是一种直接的方法:

old_a = ["a", "b", "c"]                         # ["a", "b", "c"]
new_a = old_a.map { |x| (x=="b" ? x+"!" : x) } # ["a", "b!", "c"]

当然,如果还不够的话,省略“leave-alone”的情况:

new_a = old_a.map { |x| x+"!" if x=="b" }       # [nil, "b!", nil]

我想要的是这样的:

new_a = old_a.map_modifying_only_elements_where (Proc.new {|x| x == "b"}) 
do |y|
y + "!"
end
# ["a", "b!", "c"]

在 Ruby 中有什么好的方法可以做到这一点(或者 Rails 有某种我还没有找到的便捷方法)?


谢谢大家的回复。虽然你们共同说服我最好只将 map 与三元运算符一起使用,但你们中的一些人发布了非常有趣的答案!

最佳答案

因为数组是指针,所以这也有效:

a = ["hello", "to", "you", "dude"]
a.select {|i| i.length <= 3 }.each {|i| i << "!" }

puts a.inspect
# => ["hello", "to!", "you!", "dude"]

在循环中,确保您使用的方法是改变对象而不是创建新对象。例如。 upcase!upcase 相比。

具体过程取决于您要实现的目标。很难用 foo-bar 示例给出明确的答案。

关于ruby - 映射一个只修改符合特定条件的元素的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/614335/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com