[解決済み] Array#each vs. Array#map
2023-01-10 10:43:58
疑問点
hash = { "d" => [11, 22], "f" => [33, 44, 55] }
# case 1
hash.map {|k,vs| vs.map {|v| "#{k}:#{v}"}}.join(",")
=> "d:11,d:22,f:33,f:44,f:55"
# case 2
hash.map {|k,vs| vs.each {|v| "#{k}:#{v}"}}.join(",")
=> "11,22,33,44,55"
唯一の違いは、ケース1では
vs.map
で、ケース2が
vs.each
.
ここで何が起こったのか?
どのように解決するのですか?
Array#each
は、配列の各要素に対して与えられたブロックを実行し、配列そのものを返します。
Array#map
も配列の各要素に対して与えられたブロックを実行しますが、ブロックの各反復の戻り値を値とする新しい配列を返します。
例:このように定義された配列があるとします。
arr = ["tokyo", "london", "rio"]
次に
each
:
arr.each { |element| element.capitalize }
# => ["tokyo", "london", "rio"]
戻り値は単に同じ配列であることに注意してください。 の中のコードは
each
ブロック内のコードは実行されますが、計算された値は返されません。また、コードには副作用がないため、この例では有用な作業は行われません。
対照的に、配列の
map
メソッドを呼び出すと新しい配列が返され、その要素には
map
ブロックを実行する各ラウンドの戻り値を要素とする新しい配列を返します。
arr.map { |element| element.capitalize }
# => ["Tokyo", "London", "Rio"]
関連
-
[解決済み] 配列から特定の項目を削除するにはどうすればよいですか?
-
[解決済み] JavaScript で配列に値が含まれているかどうかを確認するにはどうすればよいですか?
-
[解決済み] 配列からArrayListを作成する
-
[解決済み] 配列に特定のインデックスで項目を挿入する方法 (JavaScript)
-
[解決済み] PHPで配列から要素を削除する
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
-
[解決済み】配列に何かを追加する方法は?
-
[解決済み】JavaScriptで配列の要素を削除する - delete vs splice
-
[解決済み] Rubyでjavaのインターフェースに相当するものは何ですか?
-
[解決済み] raise "foo"`と`raise Exception.new("foo")` の違いは何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] rvm use 2.0.0 --default を実行すると、"Warning! PATH is not properly set up" と表示される。
-
[解決済み] Rubyにおけるtapメソッドの利点
-
[解決済み] Ubuntu 14.04にRuby 2.1.4をインストールする方法
-
[解決済み] Rubyで「逆レンジ」を繰り返し処理できないのはなぜですか?
-
[解決済み] Rubyで本当に安いコマンドラインオプションのパース
-
[解決済み] Capybaraで要素の正確なテキストをマッチングして要素を見つける方法
-
[解決済み] Rubyで配列を一度に初期化するには?
-
[解決済み] Ruby 配列を関数の引数に変換する
-
[解決済み] Rubyで2つの配列のマージとインターリーブ
-
[解決済み] ファイルに新しい行を追加しますか?