使用Ruby 2.4。我有一串字符串。如何用潛在的多個元素替換數組中的一個元素?我有在Ruby中,如何用一個潛在的多元素替換一個數組中的元素?
phrases[index] = tokens
然而令牌是一個數組,現在這導致一個短語陣列字符串和數組...
["abc", ["a", "b"], "123"]
如果標記爲[「A」,「B」]索引是1,我想結果是
["abc", "a", "b", "123"]
我該怎麼做?
使用Ruby 2.4。我有一串字符串。如何用潛在的多個元素替換數組中的一個元素?我有在Ruby中,如何用一個潛在的多元素替換一個數組中的元素?
phrases[index] = tokens
然而令牌是一個數組,現在這導致一個短語陣列字符串和數組...
["abc", ["a", "b"], "123"]
如果標記爲[「A」,「B」]索引是1,我想結果是
["abc", "a", "b", "123"]
我該怎麼做?
您可以指定start
和length
與Array#[]=
;替換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"]
您可以使用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"]
平面地圖將是一個更好的方式去了解它,它映射(變換),然後壓平列表中單個陣列。說我們要增加兩個元素連號:
(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]]
尼斯,我從來沒有凸輪句法。很高興知道! –
['[] =']中的ary [start,length] = obj或other_ary或nil'(http://ruby-doc.org/core-2.4.0/Array.html#method-i- 5B-5D-3D)文件。 –