使用Ruby 2.4。我有一个字符串数组。如何使用可能的多个元素替换数组中的一个元素?我有
phrases[index] = tokens
然而,令牌是一个数组,现在这会产生一个带有字符串和数组的短语数组......
["abc", ["a", "b"], "123"]
如果代币是[" a"," b"]且索引是1,我希望结果是
["abc", "a", "b", "123"]
我该怎么做?
答案 0 :(得分:4)
您可以使用Array#[]=
指定start
和length
;替换start
元素的length
索引中的子数组
或指定range
;替换索引范围指定的子数组。
phrases = ["abc", "token_placeholder", "123"]
tokens = ["a", "b"]
index = 1
phrases[index, 1] = tokens
# ^^^^^^^^^ ------------------ start and length
# OR phrases[index..index] = tokens
# ^^^^^^^^^^^^ -------------- range
phrases # => ["abc", "a", "b", "123"]
答案 1 :(得分:0)
您可以使用Enumerable#flat_map:
arr = ["abc", ["a", "b"], "123"]
arr.flat_map(&:itself)
#=> ["abc", "a", "b", "123"]
arr
没有变化。要修改arr
,
arr.replace(arr.flat_map(&:itself))
#=> ["abc", "a", "b", "123"]
arr
#=> ["abc", "a", "b", "123"]
答案 2 :(得分:0)
平面地图是一种更好的方式,它映射(变换)然后将列表展平为单个数组。假设我们想为偶数添加两个元素:
[1, 2, 4, 3, 4, 16, 5, 6, 36, 7, 8, 64, 9, 10, 100]
它将返回:
[1, [2, 4], 3, [4, 16], 5, [6, 36], 7, [8, 64], 9, [10, 100]]
与将返回的地图相比:
While DR.Read
If Not DR.IsDBNull(DR.GetOrdinal("webLinkVisible")) Then
webLinkVisible = DR("webLinkVisible")
End If
End While