Arrays 如何向数组中添加多个元素?
我可以轻松地将一个元素添加到现有数组中:Arrays 如何向数组中添加多个元素?,arrays,ruby,Arrays,Ruby,我可以轻松地将一个元素添加到现有数组中: arr = [1] arr << 2 # => [1, 2] arr=[1] arr[1,2] 如何将多个元素添加到数组中 我想做一些类似于arr[1,2,3]利用.push 您还可以选择另一个数组的所有元素 second_arr = [2, 3] arr.push(*second_arr) # => [1, 2, 3] 但请注意如果没有*,它会将第二个数组添加到arr arr.push(second_arr) # =>
arr = [1]
arr << 2
# => [1, 2]
arr=[1]
arr[1,2]
如何将多个元素添加到数组中
我想做一些类似于arr[1,2,3]
利用.push
您还可以选择另一个数组的所有元素
second_arr = [2, 3]
arr.push(*second_arr)
# => [1, 2, 3]
但请注意如果没有*
,它会将第二个数组添加到arr
arr.push(second_arr)
# => [1, [2, 3]]
劣质替代品:
您还可以链接,也可以使用以下操作:
使用+=
运算符:
arr = [1]
arr += [2, 3]
arr
# => [1, 2, 3]
有几种方法可以实现这一点:
array = [1, 2]
array += [3, 4] # => [1, 2, 3, 4]
# push: put the element at the end of the array
array.push([5, 6]) # => [1, 2, 3, 4, [5, 6]]
array.push(*[7, 8]) # => [1, 2, 3, 4, [5, 6], 7, 8]
array << 9 # => [1, 2, 3, 4, [5, 6], 7, 8, 9]
# unshift: put the element at the beginning of the array:
array.unshift(0) #=> [0, 1, 2, 3, 4, [5, 6], 7, 8, 9]
array=[1,2]
数组+=[3,4]#=>[1,2,3,4]
#推送:将元素放在数组的末尾
array.push([5,6])#=>[1,2,3,4,5,6]]
array.push(*[7,8])#=>[1,2,3,4,5,6,7,8]
数组[1,2,3,4,5,6,7,8,9]
#取消移位:将元素放在数组的开头:
array.unshift(0)#=>[0,1,2,3,4,5,6,7,8,9]
一些链接:
- Ruby 1.9.3中的数组:
- Ruby 2.0.0中的数组:
只需使用.flatten
例如,如果您有这个数组
array = [1,2,3,4,5,6]
你这样做
array.push([123,456,789])
array.push([["abc","def"],["ghi","jkl"]])
你的绳子看起来像
array = [[1,2,3,4,5,6],[123,456,789],[["abc","def"],["ghi","jkl"]]]
你需要做的就是
array.flatten!
现在,您的阵列希望
array = [1,2,3,4,5,6,123,456,789,"abc","def","ghi","jkl"]
还有一点,要构建包含n次项的数组,可以使用splat(又名星号,*
):
也可以使用splat重复多个图元:
arr = [123,'abc'] * 3 # => [123,'abc',123,'abc',123,'abc']
当然,您可以使用任意数组运算符,例如+:
arr = [true] * 3 + [false] # => [true, true, true, false]
我将其与#sample
结合使用,以生成随机加权结果:
arr.sample # => true 3 out of 4 times
使用可以将数组添加到任何位置:
a = [1, 2, 3]
b = [4,5,6]
b.insert(0, *a)
=> [1, 2, 3, 4, 5, 6]
arr.push*另一个_arr
将添加另一个_arr
作为展平值(不会添加数组,而是每个值),使用flant
不是首选方法。了解数组是如何连接的表明,使用+
或+=
可以完全避免使用展平
<代码>展平
适用于那些我们没有生成的数组,或者我们懒得正确构建的数组。@Thetman您最好使用最后的展平
而不是使用推送
构建的数组,而不是每次串联都使用+=
。使用后者,您将得到更多的垃圾和更多的复制。我还希望后者有O(n^2)时间,前者有O(n)时间;它创建了一个新数组,该数组是左右两侧的串联,并将其分配给arr
@BarryKelly,你说得对。谢谢你的评论。惊讶的是我不得不走这么远才能找到这个。惊讶的是我不得不走这么远才能找到这个。我不知道你可以用多个参数来推动。这应该是最重要的答案。我不知道为什么会有人投反对票(显然是同一个人,因为它在两年没有任何进展的情况下,在同一天投了两次反对票)。它是准确的,回答了OP。我认为问题在于你没有回答OP提出的问题?他特别要求向现有数组添加值,您向他展示了如何创建一个包含重复n个元素的数组。
arr = [123,'abc'] * 3 # => [123,'abc',123,'abc',123,'abc']
arr = [true] * 3 + [false] # => [true, true, true, false]
arr.sample # => true 3 out of 4 times
a = [1, 2, 3]
b = [4,5,6]
b.insert(0, *a)
=> [1, 2, 3, 4, 5, 6]