如何替换数组元素?

如何替换数组中的元素?

a = [1,2,3,4,5] 

我需要用[11,22,33,44].flatten!替换5 [11,22,33,44].flatten!

现在变成了

 a = [1,2,3,4,11,22,33,44] 

不确定您是否要替换特定值,但这有效:

 a = [1, 2, 3, 4, 5] b = [11, 22, 33, 44] a.map! { |x| x == 5 ? b : x }.flatten! 

这会迭代a的值,当它找到值5 ,它会用数组b替换该值,然后将数组展平为一个数组。

也许你的意思是:

 a[4] = [11,22,33,44] # or a[-1] = ... a.flatten! 

function性解决方案可能更好,仅仅是:

 a[0..-2] + [11, 22, 33, 44] 

产生……

 => [1, 2, 3, 4, 11, 22, 33, 44] 

使用a.index(5)的bta版本是最快的:

 a[a.index(5)] = b if a.index(5) # 5.133327 sec/10^6 

比Ryan McGeary的速度快至少10%:

 a.map!{ |x| x == 5 ? b : x } # 5.647182 sec/10^6 

但请注意,a.index(5)仅返回找到5的第一个索引。 因此,给定一个数组,其中5出现不止一次,结果将是不同的:

 a = [1, 2, 3, 4, 5, 5] b = [11,22,33,44] a[a.index(5)] = b if a.index(5) a.flatten # => [1, 2, 3, 4, 11, 22, 33, 44, 5] a.map!{ |x| x == 5 ? b : x } a.flatten # => [1, 2, 3, 4, 11, 22, 33, 44, 11, 22, 33, 44] 

Array#delete将返回item或nil。 您可以使用它来了解是否推送新值

 a.push 11,22,33,44 if a.delete 5 

如果你只是连接,你真的不必压扁。 因此,修剪第一个数组的最后一个元素并将它们连接起来:

 a = [ 1, 2, 3, 4, 5 ] #=> [1, 2, 3, 4, 5] t = [11, 22, 33, 44] #=> [11, 22, 33, 44] result = a[0..-2] + t #=> [1, 2, 3, 4, 11, 22, 33, 44] 

a [0 ..- 2]是一个切片操作,它接受除数组的最后一个元素之外的所有元素。

希望能帮助到你!

无论arrays中的哪个位置,此变体都会找到5

 a = [1, 2, 3, 4, 5] a[a.index(5)]=[11, 22, 33, 44] if a.index(5) a.flatten! 

这是另一种替换数组中值5简单方法:

 a[-1, 1] = [11, 22, 33, 44] 

这使用Array#[]=方法。 我不确定它为什么会起作用。

gweg,不知道你在这里想做什么,但是你在找这样的东西吗?

 a = [1, 2, 3, 4, 5] a.delete_at(4) a = a.concat([11,22,33,44]) 

有很多方法可以做到这一点 – 我不认为上面的代码特别好看。 这完全取决于原始数组中“5”的重要性。