2016-04-26 64 views
0

如果我有以下陣列...在Ruby陣列

["a =>", "b => c", "c => f", "d => a", "e => b", "f =>"] 

會如何,我得到它返回一個字符串元素刪除不想要的字符...

["a", "b", "c", "c", "f", "d", "a", "e", "b", "f"] 

我認爲遍歷與.map &使用.tr.gsub,但我永遠不能得到完全正確......

+0

可推測,你的數組就是一個例子。它看起來像這樣:'[「ab => cd」,「cd => ef」,...]'? –

+0

很少能就一個例子問一個明確的問題。我假設你的數組是一個例子,因爲如果它涉及單個特定的數組,那麼它就沒有什麼可做的。讀者需要知道數組的可能形式和期望的返回值。例如,一些答案假設,如在示例中一樣,數組中的每個元素都是''x => y「'形式,其中''x'是小寫字母,'y'是空字符串或空格後跟一個小寫字母。還有其他的可能嗎?你需要用言語陳述你的問題,並用實例來澄清。 –

回答

4

假設你只想要的字母字符串:

arr = ["a =>", "b => c", "c => f", "d => a", "e => b", "f =>"] 
arr.flat_map { |str| str.scan(/\w+/) } 
=> ["a", "b", "c", "c", "f", "d", "a", "e", "b", "f"] 

正則表達式\w說,只有對陣字母,數字或下劃線。

+1

你可以使用'flat_map {...}'而不是'map {...} .flatten' – Stefan

+0

啊,是的,很好的建議。 – Anthony

1
["a =>", "b => c", "c => f", "d => a", "e => b", "f =>"].join.gsub(/=>| /, '').chars 
# => ["a", "b", "c", "c", "f", "d", "a", "e", "b", "f"] 

["a =>", "b => c", "c => f", "d => a", "e => b", "f =>"].join.gsub(/[^a-z]/, '').chars 
# => ["a", "b", "c", "c", "f", "d", "a", "e", "b", "f"] 

所以我加入串在一起(Array#join),代替你不爲空字符串(String#gsub)要字符,結果字符串分割成其字符(String#chars)。

+0

你假定沒有元素'「ab => c」'。我們知道嗎? –

2

這應該做的伎倆:

arr = ["a =>", "b => c", "c => f", "d => a", "e => b", "f =>"] 

arr.join(' ').scan(/\w/) 
OR 
arr.join(' ').scan(/\w+/) 


=> ["a", "b", "c", "c", "f", "d", "a", "e", "b", "f"] 

有一個不錯的網站叫做Rubular(http://rubular.com/),您可以交互地測試出各種對字符串的正則表達式。它還列出了「Regex快速參考」,因此您可以瞭解您經常在Ruby代碼中看到的正則表達式。

0

根據可能的數組形式和期望的返回值,這兩個問題都沒有被問題弄清楚,您可以執行以下操作。

arr = ["a_1 =>", "b 2 => cc3", "cc3 => f6", "d4 => a_1", "e5 => b 2", "f6 =>"] 

arr.flat_map { |str| str.split /\s*=>\s*/ } 
    #=> ["a_1", "b 2", "cc3", "cc3", "f6", "d4", "a_1", "e5", "b 2", "f6"] 

沒有給出日期的其他答案返回此數組的相同值。