在Ruby中,如何用可能有多个元素替换数组中的元素?

时间:2017-03-02 16:17:20

标签: arrays ruby replace

使用Ruby 2.4。我有一个字符串数组。如何使用可能的多个元素替换数组中的一个元素?我有

phrases[index] = tokens 

然而,令牌是一个数组,现在这会产生一个带有字符串和数组的短语数组......

["abc", ["a", "b"], "123"]

如果代币是[" a"," b"]且索引是1,我希望结果是

["abc", "a", "b", "123"]

我该怎么做?

3 个答案:

答案 0 :(得分:4)

您可以使用Array#[]=指定startlength;替换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