• 締切済み

rubyで特定カラムを持つ配列を削除する方法

ruby on railsにおいて、以下のようにinpectで表示させたときに二次元ハッシュで表示される変数testがあるとき、nameがbbbの行を削除した配列を作成したいのですが、どのようにすればよろしいのでしょうか。 ●現状 logger.debug test.inpect [#<"id" => 1 , "name" => "aaa" >, #<"id" => 2 , "name" => "bbb" >, #<"id" => 3 , "name" => "ccc" >, #<"id" => 4 , "name" => "bbb" >]  ↓ ●削除後 logger.debug test.inpect [#<"id" => 1 , "name" => "aaa" >, #<"id" => 3 , "name" => "ccc" >] なかなか上手く移行ができず苦慮しています。ご教示お願いいたします。

  • mmei
  • お礼率74% (120/161)
  • Ruby
  • 回答数1
  • ありがとう数0

みんなの回答

  • notnot
  • ベストアンサー率47% (4844/10253)
回答No.1

inpectというメソッドは知らないので、外しているかもしれませんが、 test = [ {"id"=>1, "name"=>"aaa"}, {"id"=>2, "name"=>"bbb"}, {"id"=>3, "name"=>"ccc"}, {"id"=>4, "name"=>"bbb"} ] test.reject!{|x| x["name"]=="bbb"} p test

関連するQ&A

  • ruby on railsのscaffoldで配列を定義するには

    ruby on railsのscaffoldで配列を定義するには rails2.3での質問です。 通常、scaffoldで >ruby script/generate migration TestData name:string id:integer のようにデータ構造を指定すると思うのですが、この時に配列を定義するには どうしたら良いのでしょうか? 通常の(C言語のような)配列でもハッシュでも構いません。 よろしくお願いいたします。

    • ベストアンサー
    • Ruby
  • 誤って削除したIDカラムを復元する方法

    データを入力している最中、誤ってオートインクリメントのIDカラム(int 11)を削除してしまいました。 このテーブルのそれぞれのレコードに再度IDを割り振りたいです。 まだこのデータを使って何か使っているわけではないので、 IDの値自体は元のものでなくてもかまいません。 ID name 1 aaa 3 bbb 6 ccc 7 ddd : などでしたら、 ID name 1 aaa 2 bbb 3 ccc 4 ddd : と、そとりあえず個々のレコードに適当なIDを設定することができれば十分です。 このような設定を行う方法をご教示ください。 よろしくお願いいたします。

  • 【ruby】subの使い方

    文字列から最初の/~/までを切り取りたいです。 たとえば、"/aaa/bbb/ccc"の場合、"/aaa/"です。 そこで、subを使って以下の様に書いてみました。 puts "/aaa/bbb/ccc".sub(/(\/.*?\/)/,'\1') しかし、/aaa/bbb/cccと表示され、期待した結果が得られません。 以下の様にすると、 /(\/.*?\/)/=~"/aaa/bbb/ccc" puts $1 期待通り/aaa/が表示されるのですが、正規表現はsubのときと同じだし、 subの使い方の何が悪いのかわからなくなってしまいました。 ご指導のほど、宜しくお願いいたします。

    • ベストアンサー
    • Ruby
  • Rubyでの比較 (Float)

    Ruby初心者です。 簡単な比較を行いたいんですが、エラーが出てしまいます。 ファイルに ex. ruby_test.rb 0 12.3243 32 112.233 0.33123 とあり、このファイルを読み込んで比較しようとしています。 以下のコードで比較しようとしました。 ----------------------------------------------------------- fp = open("c:/ruby_test.txt") aaa = Array.new while line2 = fp.gets line2.chomp! bbb = line2.split(/\t/) aaa << bbb[1] if ( bbb[2] < 1.301029996 ) then       ※11行目 print "aaa\n" elsif ( bbb[2] < 8.164943898 ) then print "bbb\n" elsif ( bbb[2] >= 8.164943898 ) then print "ccc\n" end end fp.close -------------------------------------------- 実行すると ( ※ **** はファイル名 ) C:/ruby/*******.rb:11:in'<': comparison of String with Float failed (Argument Error) というエラーが出ます。 比較する  bbb[2] < 1.301029996  を bbb[2] < "1.301029996" すれば 動きますが、これでは文字列としての比較になってしまいますよね?? Floatは数字として比較するにはどうしたらよいのでしょうか? どなたか宜しくお願いします。

  • Cシェルでテキストファイルの行削除方法

    現在、Cシェルの勉強をしていますが、ある文言に完全一致した行のみ削除する方法が分かりません。 例として、下記のようなファイルがあり、"AAA"を指定して削除しようとすると、"AAA_1"までも削除されてしまいます。 例)test.txt AAA aaa AAA_1 aaa BBB bbb CCC ccc お手数ですがご教授いただけると幸いです。 以上、宜しくお願い致します。

  • [Objective-c]多次元配列のアクセス方法

    [Objective-c]多次元配列のアクセスの仕方をご教授いただきたく思います 処理文 NSLog(@"%@",[ar objectAtIndex:1]); ※arは多次元配列 コンソールの表示結果 { item1 ="aaa"; item2 ="bbb"; item3 ="ccc"; } インターネットでは多次元配列のアクセスの仕方が見当たりませんでした。 この様な表示ではなく、この中のaaa,bbb,cccをそれぞれを明示的に取得する方法は存在しますでしょうか? よろしくお願いいたします。

  • phpでのメールフォームの作成について

    HTMLで <form action="mail.php" method="post"> <input name="aaa" type="checkbox" id="aaa" value="AAA" checked> <input name="bbb" type="checkbox" id="bbb" value="BBB" checked> <input name="ccc" type="checkbox" id="ccc" value="CCC" checked> </form> として、次に進むボタンを押すとmail.phpに飛び mail.phpでは、チェックされたものだけを表示したいのですが、どうすればよいでしょうか? もし、AAAとBBBが選ばれたら あなたが選んだのは AAA、BBBです。 と表示したいです。そのあとにメールフォームを続けるつもりです。 ご教授よろしくお願いします。

    • 締切済み
    • PHP
  • CSVに外部テキストファイルを列として追加する方法

    こんにちは。 CSVファイル(base.csv)の先頭列に、別のテキストファイル(add.txt)の中身を新規の列として挿入したいと考えているのですが、よい方法がわかりません。。。 どうのような方法を使えば対応することができるでしょうか? どうぞよろしくお願いいたします。 ■CSVファイル(master.csv) title,developer_name,seller_name,primary_genre_name,application_url AAA,BBB,CCC,DDD,EEE AAA,BBB,CCC,DDD,EEE AAA,BBB,CCC,DDD,EEE AAA,BBB,CCC,DDD,EEE ■テキストファイル(add.txt) id 000 111 222 333 ↓ ■目標としたファイル(master.csv) id,title,developer_name,seller_name,primary_genre_name,application_url 000,AAA,BBB,CCC,DDD,EEE 111,AAA,BBB,CCC,DDD,EEE 222,AAA,BBB,CCC,DDD,EEE 333,AAA,BBB,CCC,DDD,EEE

  • rubyの文法について質問です。

    rubyの文法について質問です。 aaa = `diff -q bbb ccc` のような形でdiffコマンドの実行結果をaaaに格納したいのですが bbb及びcccを任意に入力したく、一度getsメソッドでbbb,cccそれぞれに文字列を代入したのですが、それをバッククォーテーション内で使用できず困っています。 なにか解決策がありましたらご教授いただけるとありがたいです。 よろしくお願いします。

    • ベストアンサー
    • Ruby
  • 条件付の重複レコードの削除 (sqlite3)

    重複レコードの削除で、重複レコード内の日付が最も新しいのだけを残したいのですが sqlite3のクエリをどう書けるのでしょうか? 例えば以下のような構造で、keyの重複を削除するのですが、 keyごとにyear, monthのもっとも新しいのだけ残したのです。 よろしくお願いします。 id, key, year, month, value 1 , aaa, 2000,12, 1000 2 , bbb, 2001, 1, 600 3 , bbb, 2001, 4, 500 4 , bbb, 2000, 2, 400 5, ccc, 2001, 3, 300 6, ccc, 2001, 8, 200 クエリ実行の結果こうしたい↓ 1 , aaa, 2000,12, 1000 3 , bbb, 2001, 4, 500 6 , ccc, 2001, 8, 200

    • ベストアンサー
    • MySQL