2017-03-02 49 views
4

使用Ruby 2.4。我有一串字符串。如何用潛在的多個元素替換數組中的一個元素?我有在Ruby中,如何用一個潛在的多元素替換一個數組中的元素?

phrases[index] = tokens 

然而令牌是一個數組,現在這導致一個短語陣列字符串和數組...

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

如果標記爲[「A」,「B」]索引是1,我想結果是

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

我該怎麼做?

回答

4

您可以指定startlengthArray#[]=;替換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"] 
+2

尼斯,我從來沒有凸輪句法。很高興知道! –

+1

['[] =']中的ary [start,length] = obj或other_ary或nil'(http://ruby-doc.org/core-2.4.0/Array.html#method-i- 5B-5D-3D)文件。 –

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"] 
0

平面地圖將是一個更好的方式去了解它,它映射(變換),然後壓平列表中單個陣列。說我們要增加兩個元素連號:

(1..10).flat_map { |i| i.even? ? [i, i**2] : i } 

這將返回:

[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]] 
相關問題