• 締切済み

ネストされたハッシュの値から要素を削除する方法

以下の様なハッシュ「target」に対し、idもしくはtag_idの値が""であるtarget["4"]の要素のみ削除したいと考えています。どなたか方法をご教授いただけないでしょうか。 target = {"0"=>{"id"=>"2", "tag_id"=>"3"}, "1"=>{"id"=>"3", "tag_id"=>"1"}, "2"=>{"id"=>"4", "tag_id"=>"1"}, "3"=>{"id"=>"5", "tag_id"=>"2"}, "4"=>{"id"=>"", "tag_id"=>""}}

  • Ruby
  • 回答数1
  • ありがとう数10

みんなの回答

  • Picosoft
  • ベストアンサー率70% (274/391)
回答No.1

target = {"0"=>{"id"=>"2", "tag_id"=>"3"}, "1"=>{"id"=>"3", "tag_id"=>"1"}, "2"=>{"id"=>"4", "tag_id"=>"1"}, "3"=>{"id"=>"5", "tag_id"=>"2"}, "4"=>{"id"=>"", "tag_id"=>""}} target.delete_if{|k,v| v["id"].empty? || v["tag_id"].empty?} # => {"0"=>{"id"=>"2", "tag_id"=>"3"}, "1"=>{"id"=>"3", "tag_id"=>"1"}, "2"=>{"id"=>" 4", "tag_id"=>"1"}, "3"=>{"id"=>"5", "tag_id"=>"2"}}

参考URL:
http://docs.ruby-lang.org/ja/2.1.0/class/Hash.html#I_DELETE_IF

関連するQ&A

  • ハッシュの要素の取り出し方

    ハッシュの要素の取り出し方で困っています。 以下のようにハッシュの要素を取り出して thmlタグの中に埋め込もうとしたのですが、 push( @arry, { 'syubetu' => 'cat' , 'name' => 'たま', 'age' => '12才', }, { 'syubetu' => 'dog' , 'name' => 'ポチ', 'age' => '2才' , }, { 'syubetu' => 'bird' , 'name' => 'ピ-コ', 'age' => '5才' , } ); @html_tag = ( '<table><tr><td>' . "\n", 'syubetu=$syubetu : name=$name : age=$age' . "\n", '</td></tr></table>' . "\n", ); foreach ( @arry ){ foreach $tag( @html_tag ){ $tag =~ s/\$syubetu/$_->{"syubetu"}/gm; $tag =~ s/\$name/$_->{'name'}/gm; $tag =~ s/\$age/$_->{'age'}/gm; print $tag; } $tag2 .= "syubetu: " . $_->{'syubetu'} . "\r\n"; $tag2 .= "name: " . $_->{'name'} . "\r\n"; $tag2 .= "age: " . $_->{'age'} . "\r\n"; } print $tag2; 結果が先頭の要素を登録数分、繰り返し出力してしまいます。 でも、同じforeachの中でも$tag2の場合は 正常に出力されます。 この違いがわからなくて困っています。 どなたか教えていただけますでしょうか。 ・出力結果 <table><tr><td> syubetu=cat : name=たま : age=12才 </td></tr></table> <table><tr><td> syubetu=cat : name=たま : age=12才 </td></tr></table> <table><tr><td> syubetu=cat : name=たま : age=12才 </td></tr></table> syubetu: cat name: たま age: 12才 syubetu: dog name: ポチ age: 2才 syubetu: bird name: ピ-コ age: 5才

    • ベストアンサー
    • Perl
  • arrayである値を持った要素のみを削除するすっきりした方法。

    PHP4で,ある値を持った要素のみを削除したarrayをかえしたいのですが,たとえば,[d]と[e]をいう値をもった要素を削除したい場合, $a = array("a", "b", "c", "d", "e"); $eraseitem = array("d", "e"); $new_a = array(); foreach($a as $value); { if (!in_array($value, $erasesitem)) { $new_a[] = $value; } } とすれば,削除できますが,ほかに何かいい方法はないでしょうか。(デフォルトの関数などを使用してすっきりとできないのでしょうか。) 詳しい方,よろしくお願いします。

    • ベストアンサー
    • PHP
  • div要素内の全input要素をdisable

    Javascriptで、あるdiv要素内のチェックボックスやテキストフィールドなどのinput要素を すべてdisableにしたいです。 以下でうまくいきません。どなたかお知恵を頂けないでしょうか? よろしくお願い致します。 var input_tags = document.getElementById("div_id").getElementsByTagName("input"); for(var input_tag in input_tags) { input_tag.disabled = true; }

  • C#の指定したタグ要素を削除

    C#のRemoveChildメソッドを使用して、指定したタグ要素を削除したいです。 下記サイトのサンプルコードを見ると、タグ<zip></zip>で囲まれている箇所を削除していますが、例えばタグ<zip id="aaaaa"></zip>のようにIDがついている場合も削除することが可能でしょうか? ※IDは毎回変わります また不可能な場合、可能となる方法についてご教示頂きたいです。 サンプルコード http://hiros-dot.net/CS2005/XML/DOM/DOM18.htm

  • JQueryでxmlns属性(セミコロン:)付きの要素にアクセスする

    JQueryでxmlns属性付きの要素にアクセスする方法がわかりません。 <tag:hoge>text</tag:hoge> のようなタグにアクセスしたいのですが、 find("tag") find("tag:hoge") find("hoge") のいずれでもアクセスできずこまってます。 よろしくお願いします。

  • HTMLDocumentで要素を削除する方法

    以下に示すような形式の行を大量に格納したHTMLDocumentがあります。 先頭から要素をいくつか(全体の3割とか)削除するにはどうしたらよいでしょうか? できればまとめて削除できると助かります。 また、n行ごとにとあるタグで括ってあれば可能、というのでも構いません。 <FONT>~</FONT><BR> <FONT><a href=~>~</a>~</FONT><BR> お知恵を拝借できれば助かります。

  • ハッシュについて

    今ハッシュについて勉強しています。 hashtableクラスを使用して3つのキーに1つずつ値をいれて、その後全部のキーと値を表示したり、値を更新したり、削除したいしたいと思っています。 全部のキーと値を表示させるにはどのように記述すればいいのでしょうか? おすすめのサイトなどあったらおしえてください!!

    • ベストアンサー
    • Java
  • 配列にある重複要素を削除したい(VBA)

    エクセルVBAにて、あるルールで対象となるセルの値を配列に格納しております。 配列の要素には重複しているものもあるため、重複要素を配列から削除したいのですが その方法が分かりません。 どなたか、よろしくご教授下さい。

  • 値の削除

    アドバイスお願いします。 $tmptmp = implode(",", $tmp); for($j = 0; $j < count(tmp); $j++){ if(preg_match("/$haifu/", $tmptmp)){ $target = preg_replace("/{$haifu},?/", "", $tmptmp); echo "target : ".$target."<br>"; $tmptmp = $target; } } // 上のプログラムは // $haifu と $tmptmp が一致するなら一致した$haifuを削除する // $tmptmp == 000000,000001 の場合 // $haifu == 000001 ならば // $tmptmp から $haifu が削除されて // $target == 000000 となる。 また、もし、 // $tmptmp == 000000,000001,000002 // $haifu == 000000 // $target = 000001,000002 となる。問題は$haifuの値が複数存在する場合。 また、新たに$tmptmpが更新されてしまうので削除された値ではなく、最初の$tmptmpと$haifuとの比較になってしまいます。 // $tmptmp == 000000,000001,000002 // $haifu == 000001 // $target = 000000,000002 となってしまう。 目的は、$haifu がいくつ存在しても $tmptmp == 000000,000001,000002 $haifu == 000000 $target == 000001,000002 次に、$targetの値と$haifuを比較して $haifu == 000001 $target == 000002 となるプログラムにしたいのですが、 うまくいきません。アドバイスお願いします。

    • 締切済み
    • PHP
  • simplexmlでルート要素の値を取得したい

    PHPでsimplexmlを用いていますが、XMLから値を取得する方法で、他のタグなどの情報は取り出せるのですが、ルート要素である以下の文章からtotalResultsの値である20だけを取り出したいですがうまくいきません。 <ResultSet totalResults="20" totalReturned="2"> 以下のようにあるところへ投げた結果のXMLを取得しています。 $file = file_get_contents( $url ); $xml = simplexml_load_string( $file ); お手数ですがよろしくお願いします。

    • ベストアンサー
    • PHP

専門家に質問してみよう