Ruby 如何替换阵列';s元素?

Ruby 如何替换阵列';s元素?,ruby,arrays,Ruby,Arrays,如何替换数组中的元素 a = [1,2,3,4,5] 我需要用[11,22,33,44]替换5。展平 所以a现在变成 a = [1,2,3,4,11,22,33,44] gweg,不知道你想在这里做什么,但你在找这样的东西吗 a = [1, 2, 3, 4, 5] a.delete_at(4) a = a.concat([11,22,33,44]) 有很多方法可以做到这一点——我不认为上面的代码特别好看。这完全取决于“5”在原始数组中的重要性。您的意思可能是: a[4] = [11,22,

如何替换数组中的元素

a = [1,2,3,4,5]
我需要用
[11,22,33,44]替换5。展平

所以
a
现在变成

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

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

a = [1, 2, 3, 4, 5]
a.delete_at(4)
a = a.concat([11,22,33,44])
有很多方法可以做到这一点——我不认为上面的代码特别好看。这完全取决于“5”在原始数组中的重要性。

您的意思可能是:

a[4] = [11,22,33,44] # or a[-1] = ...
a.flatten!
功能性解决方案可能更好,不如:

a[0..-2] + [11, 22, 33, 44]
这就产生了

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

如果只是连接,就不必展平。因此,从第一个数组中修剪最后一个元素并将其连接起来:

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]
[0..-2]是一个切片操作,它只接受数组的最后一个元素


希望有帮助

此变体将找到
5
,无论它在数组中的什么位置

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

不确定是否要替换某个特定值,但这是可行的:

a = [1, 2, 3, 4, 5]
b = [11, 22, 33, 44]
a.map! { |x| x == 5 ? b : x }.flatten!
这将迭代
a
的值,当它找到
5
的值时,它将该值替换为数组
b
,然后将数组展平为一个数组。

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

a[a.index(5)] = b if a.index(5) # 5.133327 sec/10^6
比的速度至少快10%:

但是,请注意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]
将返回该项目或零。你可以用它来知道是否要推行你的新价值观

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

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

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

这就使用了这个方法。但我不太清楚它为什么能工作。

请解释一下为什么需要这样做,以及在什么情况下,我可能想将标题改为“如何在ruby“each”风格的迭代器中替换数组元素+1谢谢!当我想在数组中的可变位置用两个值替换单个元素时,函数解决方案更适合,即:a[0..b-1]+[val1,val2]+[b+1..-1]虽然这确实有效,但对于原始海报所要做的事情来说太复杂了。使用阵列切片替换范围是一种更直接、更简单的解决方案。请参见。@Ryan McGeary我需要一个相同的方法,除了值5,我想用一个单词“BINGO”替换数组中所有可被3整除的数字。如何做到这一点。我尝试了
ari=(0..100)。到一个ary.map!{| i | i%3==0?i:“宾果”}
它取代了除可被3整除的部分之外的所有部分这是一项非常干净、很好的工作!
a[-1, 1] = [11, 22, 33, 44]