スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Tag:スポンサー広告 

【Rails】ActiveRecordの必要なカラムだけを配列で受け取るpluckメソッド

ふと開発中にpluckメソッドを使っていた時に、そういえば大昔こんな記事を書いてたっけと思い出してpluckについて改めてメモをしておこうかと思います。

【Ruby】ActiveRecordのSELECT結果の必要な属性だけをさっくり配列で受け取る方法



こんな感じでmapで書いていたものが



こんな感じです。さらにRails4からは



このようにカラムを複数しているすると

[[1,"hoge"], [2, "foo"], ... ]

のような配列を受け取ることができます。

パフォーマンスについても素晴らしいようです

[参考]
Rails3.2から導入されたpluckメソッドのパフォーマンスが素晴らしい件
スポンサーサイト

Tag:Ruby  Trackback:0 comment:0 

【Ruby】SetとArrayのパフォーマンス比較

要素がユニークな配列を作る時Arrayのuniqを使うと思いますが、RubyにはSetというクラスがあります。



こんな感じでrequireして上げると使えます。
試しに1000000回ループして99個の要素を作る場合のコードでパフォーマンスの違いを見てみます。

ループ内で常に要素をユニークに保って起きたいケース




そうするとこんな結果が得られます。

user system total real
0.230000 0.000000 0.230000 ( 0.234813)
30.850000 0.150000 31.000000 ( 31.274483)

このコードの場合のようにループ内で常に配列をユニークに保って起きたいという場合にはSetの方がArrayに比べてはるかに優秀に見えますね。

ループ処理後に要素をユニークにしたいケース




こうすると

user system total real
0.240000 0.000000 0.240000 ( 0.245976)
0.190000 0.010000 0.200000 ( 0.190087)

このような結果が得られます。

ループ内ではユニークに保たなくていいけど、ループ処理が終わった時に始めてユニークにしたい場合はArrayに軍配のようです。

まとめ


SetとArrayのパフォーマンス比較はループ内で要素が常にユニークな状態で保ちたい場合はSetを使うでループ処理が終わったあとでユニークにすれば十分な場合はArrayを使う
という感じでしょうか

Tag:Ruby  Trackback:0 comment:0 

【Ruby】親クラスのメソッドをオーバーライドする時に注意すること

最近Androidアプリの開発から久しぶりにRubyを書くことが多くなってきてちょっとハマったのでメモ

たとえばこんな場合



親クラスのメソッドの値をみつつその振る舞いを変えたい場合こんな実装をしてしまうと下記のようなエラーになります

stack level too deep (SystemStackError)



こうすることで回避できます。すっかりsuper()というものの存在を忘れていました。
僕がハマったのはRailsのActiveRecordのオブジェクトであるattributeの振る舞いを変更したいと思った時にattributeと同名のメソッドを上記の例のように実装した時に起こりました。

念のためのメモでした

Tag:Ruby  Trackback:0 comment:0 

【Ruby】文字列の配列を文字数の長さでソートする方法

Rubyで配列をソートするときに使うsortについて少しだけ復習します

単純な文字列で構成された配列を文字数の長さでソートしたい場合


文字数で降順


文字数で昇順


このように要素の比較処理の部分でsizeをとってあげれば文字数でソートができます。

ハッシュを含む配列の場合




といったハッシュの配列の:keywordというキーの文字数でソートしたい場合もあるかと思います

降順


昇順


まとめ


配列の要素の何をソートのキーにするかはかなり柔軟に設定することがわかりました
テーマ : プログラミング
ジャンル : コンピュータ

Tag:Ruby  Trackback:0 comment:0 

【Ruby】Stringのsplitメソッドで終端の空文字を配列の要素から省略したくない場合

文字列(Stringクラスのオブジェクト)をある文字で区切るときなんかに使うsplitメソッド。
今日はこのsplitメソッドでちょっと気がついたことがったので書き残したいと思います。

:で連結された文字列をsplitで分割した場合



こんな感じになります。

途中に空の文字が挟まれている場合



もちろん空文字で配列の要素になりますね。

しかし空文字が端にあった場合はどうでしょう。



空文字が先端にあるときと終端にあるときで挙動が違うようです。

この終端が空文字の時に配列から省略させたくない場合以下の用にsplitメソッドの第二引数に-1を渡して上げればよさそうです。



第二引数はどうやら分割する数の指定のようです。

今までの文字列をsplitするときに第二引数に2を指定してあげると



このような感じで二つに分割されるみたいです。
テーマ : プログラミング
ジャンル : コンピュータ

Tag:Ruby  Trackback:0 comment:0 

プロフィール

6rats

Author:6rats
こんにちは、ITベンチャーで働くエンジニアです
主に自分の周りで起きた技術的なことをメモとして書き残して行きます。
Android以外にもRuby/Ruby on RailsやFuelPHPなどなどたまにやります。基本的なスタンスとしては興味があるもしくは必要になったらいろんなことにチャレンジします。
最近はiOSアプリ開発を始めています。

購読
follow us in feedly
個人プロダクト

Androidアプリ

Twitterクライアント

Webアプリケーション

EcPriceWatch(Amazon価格の推移を計測、最安値を知らせるサービス)
Google AdSense
ブログ村
にほんブログ村 IT技術ブログへ
にほんブログ村
ブロとも申請フォーム

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。