2014-04-29 83 views
0

數組英語句子般的名單是否有一個Ruby/Rails的「神奇」的幫手,從字的數組中去,像紅寶石 - 從文字

["Sugar", "Water", "Lemons", "Tea"] 

到可以適合在一個字符串句子:

"Sugar, Water, Lemons and Tea" 

我知道array.join(),但最後一項之前的「and」很重要。
我只是問,因爲我知道,Ruby和Rails有很多有用的方法,潛伏在黑暗中,我想保持我的代碼儘可能乾淨

回答

8

好像這是你在找什麼:)

http://apidock.com/rails/Array/to_sentence

to_sentence(options = {})

「的陣列,其中的最後一個元素是由連接器連接的字以逗號分隔的句子轉換」。

例子:

["Sugar", "Water", "Lemons", "Tea"].to_sentence # => "Sugar, Water, Lemons, and Tea"

您還可以通過選擇,像什麼應該是你的最後一個字連接器:

["Sugar", "Water", "Lemons", "Tea"].to_sentence(last_word_connector: ' or ') # => "Sugar, Water, Lemons or Tea"

編輯:

正如馬克斯指出,威廉姆斯,這將默認在最後一個字旁邊留下一個逗號。爲了避免這種情況,你可以顯式聲明" and "爲您的最後一個字接口,爲默認似乎是", and "

["Sugar", "Water", "Lemons", "Tea"].to_sentence(last_word_connector: ' and ') # => "Sugar, Water, Lemons and Tea"

+0

如果你提供一個例子,它會很好。 – Santhosh

+0

在「和」之前加上一個額外的逗號,所以不是他所要求的。這是臭名昭着的「牛津逗號」,「吸血鬼週末」並沒有提供任何關於它的信息。 :) –

+0

明白我的意思! Ruby只是加載了這些神祕的方法。謝謝@rorofromfrance –

4

試試這個

pry(main)> ["Sugar", "Water", "Lemons", "Tea"].to_sentence 
=> "Sugar, Water, Lemons, and Tea" 

pry(main)> ["Sugar", "Water", "Lemons", "Tea"].to_sentence(words_connector: ', ', last_word_connector: ' and ') 
    => "Sugar, Water, Lemons and Tea" 
0

你可以仍然使用連接,分別做最後一個元素。

def commas_with_and(arr) 
    arr[0..-2].join(", ") << " and " << arr[-1] 
end 

arr = ["Sugar", "Water", "Lemons", "Tea"] 
commas_with_and(arr) 
>> "Sugar, Water, Lemons and Tea"