29

要素の配列を大文字にするにはどうすればよいですか?期待される出力は次のようになります。

["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]  
=> ["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY"]

以下は機能せず、小文字のままにしました。

Day.weekday.map(&:name).each {|the_day| the_day.upcase }
 => ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"] 
4

3 に答える 3

64

新しい配列を返す

大文字の配列を返したい場合は、#mapを使用してください。

array = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]

# Return the uppercased version.
array.map(&:upcase)
=> ["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY"]

# Return the original, unmodified array.
array
=> ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]

ご覧のとおり、元の配列は変更されていませんが、式を使用できる場所であればどこでも#mapからの大文字の戻り値を使用できます。

アレイをインプレースで更新

配列をインプレースで大文字にする場合は、#mapを使用してください。代わりは:

array = ["Monday", "Tuesday", "Wednesday", "Thursday", "Friday"]
array.map!(&:upcase)
array
=> ["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY"]
于 2012-07-09T20:28:19.180 に答える
7

これは機能するはずです:

Day.weekday.map(&:name).map(&:upcase)

または、CPUサイクルを節約したい場合

Day.weekday.map{|wd| wd.name.upcase}
于 2012-07-09T20:14:53.563 に答える
4

あなたの例では、「each」を「map」に置き換えます。

'each'は配列を反復処理しますが、ブロックによって返された値を含む新しい配列は作成しません。

于 2012-07-09T20:17:52.677 に答える