2011-07-18 10 views
9

リストの最後の要素の前にリストを入れてカンマ区切りの文字列にしますか?ルビリストの最後の要素の前に "and"を挿入して人間が読めるリストを作成する

のようなもの取る:

list1 = ['a','b','c'] 

をそして、これにそれを回す:私はルビーは、このための方法を持っていた覚え

=> "a, b, and c" 

。私はしかし、検索し、それを見つけることができませんでした。 助けてくれてありがとう。

+3

+1を国際化ロケールを使用していますto_sentence方法があります! –

答えて

15

試行:[list[0...-1].join(", "), list.last].join(", and ")

編集:Railsには、おそらく探していた方法があり、to_sentenceと呼ばれています。

class Array 
    def join_all(join_with = ", ", connector = "and", last_comma = false) 
    return self.to_s if self.empty? || self.size==1 
    connector = join_with+connector if last_comma 
    [list[0...-1].join(join_with), list.last].join(connector) 
    end 
end 
+0

ああ、そうです! to_sentenceはそれを行います。 –

+0

これは1つの要素 – fl00r

+0

と空の配列の配列では機能しません。 – fl00r

0

は良い方法かもしれませんが、これは動作します:あなたはRailsのを持っていないか、Railsの上のオープンArrayクラスに依存したくないなど、上記の方法を含み、場合

class Array 
    def to_human_string 
    arr = Array.new(self) 
    last = arr.pop 
    arr.join(", ") + ", and " + last.to_s 
    end 
end 

使用法:

['a','b','c'].to_human_string 
=> "a, b, and c" 

あなたは区切り文字のオプションを追加することができ、 'と'とオプションのオックスフォードカンマ。

+0

これは1要素の配列では動作しません – fl00r

4
class Array 
    def to_sentence 
    sentence = self[0..-2].join(", ") + ", and " + self[-1].to_s if self.size > 1 
    sentence ||= self.to_s 
    end 
end 

ので

[1].to_sentence 
#=> "1" 
[1,2,3].to_sentence 
#=> "1, 2, and 3" 
[].to_sentence 
#=> "" 

とRailsで、ここオックスフォードコンマを使用するためにも

関連する問題