2016-05-21 15 views
1

私は現在どのモデレーターが部屋にいるのかを表示しようとしています。不要なコンマを取り除く方法

puts m.roster.keys.map { |v| "Mods in the room are: #{if m.roster[v].x[0].role.to_s.include?('moderator') then v end}" }.join(", ") 

結果は次のとおりです:

Mods in the room are: , , User3, User4, , , , , , , User11, , User13 

は、これらの不要なカンマを取り除くが、以下のようにそれぞれを区切るカンマを保持取得するにはどの方法があります。これは私がやったことありますか?

Mods in the room are: User3, User4, User11, User 13 
+0

あなたの部屋の改修は: "あなたのコードで一度だけ印刷されますか? – sawa

+1

「m」とは何ですか? 「名簿」とは何ですか? – sawa

+0

配列からnil個の要素を削除するために '.compact.join( '、')'を呼び出すことができると思いますが、このコードはあなたの意図が分かりにくいので簡潔です。 – max

答えて

1

このような何かは、あなたが探しているものかもしれません:私はあなたにモデレーターのリストを与えると信じて

puts "Mods in the room are: #{m.roster.select {|k,v| v.x[0].role.to_s.include?('moderator') }.keys.join(", ")}" 

+1

素晴らしい!それだった!本当にありがとう! –

+0

@MarryJaneこれは、あなたが望むように、 'User'の後にスペースを挿入しません(' 13'が後に続きます)。 – sawa

+0

@ sawa、私はあなたが言及したスペースは、例ではタイプミスであると信じています。元のコードでは、スペースを挿入するためにユーザー名を変更しようとせず、リストを作成して出力に「、」で区切るだけです。ユーザー名「User1」、「User2」、「User11」などは、実際のユーザー名ではなく、単にユーザー名の代表的なプレースホルダーです。 –

1

私はあなたのコードに従いませんが、誤った結果は次のように変更することができます。

str = "Mods in the room are: , , User3, User4, , , , , , , User11, , User13" 

first, *rest = str.split /(?:\s*,+)+/ 
    #=> ["Mods in the room are:", " User3", " User4", " User11", " User13"] 
"%s %s" % [first, rest.join(', ').lstrip] 
    #=> "Mods in the room are: User3, User4, User11, User13" 
関連する問題