我有一個數組,看起來像這樣:從另一個陣列創建一個數組
Array_1 = ["A1", "A2", "A3", "A4", "A5", "B1", "B2", "B3", ..., "Z5"]
我想創建"A5"
後到來的Array_1
的元素的數組:
Array_2 = ["B1", "B2", "B3", ..., "Z5"]
我有一種醜陋的方式,減去兩個數組來創建第三個數組,但我覺得這肯定是一種優雅的ruby方式,應該很簡單。任何幫助將是驚人的。
我有一個數組,看起來像這樣:從另一個陣列創建一個數組
Array_1 = ["A1", "A2", "A3", "A4", "A5", "B1", "B2", "B3", ..., "Z5"]
我想創建"A5"
後到來的Array_1
的元素的數組:
Array_2 = ["B1", "B2", "B3", ..., "Z5"]
我有一種醜陋的方式,減去兩個數組來創建第三個數組,但我覺得這肯定是一種優雅的ruby方式,應該很簡單。任何幫助將是驚人的。
Array_1 = ["A1", "A2", "A3", "A4", "A5", "B1", "B2", "B3", "Z5"]
Array_1[Array_1.index("A5")+1..-1]
# => ["B1", "B2", "B3", "Z5"]
(我想我們應該首先計算idx = Array_1.index("A5")
,以確保它的非空。)
。 。 。
另一種方式是利用Ruby的很少使用flip-flop運營商:
Array_1.select { |e| e=="A5" .. false ? true : false }[1..-1]
#=> ["B1", "B2", "B3", "Z5"]
表達仍然false
直到e=="A5"
是true
,並保持true
直到下面的兩個點的表達是true
。因此,
Array_1.select { |e| e=="A5" .. false ? true : false }
#=> ["A5", "B1", "B2", "B3", "Z5"]
[1..-1]
就是附加上而不"A5"
返回此陣列。
觸發器操作者必須的條件表達式,這就是爲什麼我們可以不寫的一部分:
Array_1.select { |e| e=="A5" .. false }[1..-1]
#ArgumentError: bad value for range
(對於e=="A5" .. false
被視爲正常範圍)。
這將創建您使用正則表達式匹配使用的數組。
array = ('A1'..'Z5').to_a.reject { |el| el.match %r/[A-Z][0, 6-9]/ }
然後使用另一個正則表達式匹配去除「A(數字)」元素。
array_2 = array.select { |el| el.match %r/[B-Z]\d/ }
這有附加的好處,不關心順序,並可以分開他們不管。
Array_1.slice_when{|e| e == "A5"}.to_a.last
# => ["B1", "B2", "B3", ..., "Z5"]
太棒了!超級甜美而短暫! –
這個怎麼樣?
arr = ["A1", "A2", "A3", "A4", "A5", "B1", "B2", "B3", "Z5"]
p arr.drop_while {|s| s != "A5" }.drop(1)
# => ["B1", "B2", "B3", "Z5"]
這太棒了!謝謝您的幫助! –
.slice_after需要一個參數,用於切分陣列
Array_1.slice_after("A5").to_a.last
=> ["B1", "B2", "B3", "Z5"]
我甚至不知道觸發器運營商存在!棒極了! – 13aal
非常棒!觸發器操作員正是我所期待的!感謝您的時間和幫助! –