[過去ログ] Ruby 初心者スレッド Part 58 [無断転載禁止]©2ch.net (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
597(2): デフォルトの名無しさん [sage] 2016/07/29(金) 19:32:20.85 ID:jkc14IDK(1) AAS
nums.each do |key, value|
if value%2 == 0
nums[:key] = value
end
まずこれはeach doに対してendが無いからエラーになる
そして:keyはkeyではなく:keyというSymbolなのでこれも間違い
nums = {:a=>1 :b=>22(2): デフォルトの名無しさん [sage] 2016/03/24(木) 04:01:05.34 ID:FJvNCHp3(1) AAS
たのしいRuby 第5版、2016
Effective Ruby、2015
メタプログラミング Ruby 第2版、2015
Rubyのしくみ、2014
改訂3版 基礎 Ruby on Rails、黒田努・佐藤和人、2015
:c=>3 :d=>4 :e=>5 :key=>1}
nums[:b] = 2
p nums #=> {:a=>1 :b=>2 :c=>3 :d=>4 :e=>5 :key=>1}
飽くまで:bに対して2を再び関連付けているだけなので間違い
どうしても上のような書き方がしたいなら
h = Hash.new
nums.each do |key, value|
if value%2 == 0
h[key] = value
end
end
p h #=> {:b=>2 :d=>4} ◎
Rock54: Caution(BBR-MD5:0be15ced7fbdb9fdb4d0ce1929c1b82f)
598: デフォルトの名無しさん [] 2016/07/29(金) 20:01:51.49 ID:mtfgcrou(1) AAS
>>597
やはりあなたはリンクしすぎです
ばいばいおさるさん
599: デフォルトの名無しさん [] 2016/07/29(金) 23:54:22.01 ID:AO+a9SAV(3/3) AAS
某テキスト(?)のメソッド Enumerable#select! を使うなら、
>>593593(2): デフォルトの名無しさん [sage] 2016/07/29(金) 15:35:49.37 ID:flV7hOuN(1) AAS
>>590
これだと偶数の要素だった場合、その要素を再代入してることになる
新しく別の配列に代入するとかならその書き方で問題ないと思うよ
ちなみに nums.select! { |k, v| v % 2 == 0 } が一番良さそう
と >>595595(2): デフォルトの名無しさん [sage] 2016/07/29(金) 16:55:05.51 ID:Ogz/SEhr(1) AAS
特に面白いものは書けず
nums.reject{|_,v|v.odd?}
nums.grep(proc{|_,v|v&1==0}).to_h
nums.each{|k,v|v.odd?&&nums.delete(k)}
の先頭を参考にして;
nums.select! { |_, val| val.even? }
外部リンク:ideone.com
もしも同メソッドを使用せずに自前で各要素を列挙するなら:
nums.each do |key, val|
nums.delete key unless val.even?
end
外部リンク:ideone.com
なお >>597 のように、元の変数 nums の値を(破壊的代入)で更新せず、
結果としての値を求めることを優先するというお題の改変が許されるなら:
nums.select { |_, val| val.even? }
外部リンク:ideone.com
このコードを推奨する
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.187s*