トップページ⇒tech
1001コメント355KB

Ruby 初心者スレッド Part 52

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2013/06/06(木) 23:50:09.17
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
RoRはスレ違いよ

前スレ
Ruby 初心者スレッド Part 51
http://toro.2ch.net/test/read.cgi/tech/1358636526/

るりまサーチ (リファレンス検索)
http://rurema.clear-code.com/

Rubyist Magazine - るびま
http://jp.rubyist.net/magazine/

逆引きRuby
http://www.namaraii.com/rubytips/
07567942013/10/13(日) 17:40:58.21
ここ初心者スレだよね?
書店に行くから参考にしたいと思って聞いたのに誰も答えてくれないし
後の書き込みへの罵りばっかりってここけっこう民度ひどくないかな
0757デフォルトの名無しさん2013/10/13(日) 17:41:29.67
749でした・・・
07586112013/10/13(日) 17:41:52.36
おれもそうおもう
0759デフォルトの名無しさん2013/10/13(日) 17:45:10.46
>>754-755は運営本人ですか
0760デフォルトの名無しさん2013/10/13(日) 17:47:24.42
>>756
本の良し悪しなんてその人次第だからなあ、答えようがない
誰かにとって良い本が他の誰かには糞だったりもする
万人に糞な本ならしばしばあるが、万人に良い本は本当に稀

てか答えようがないものに対してスルーされるのはマシなほうの対応よ?
スレによっちゃ割とまともな質問すら罵倒しかこないのに
0761デフォルトの名無しさん2013/10/13(日) 18:16:28.35
良いレストランないですか? そんな食い物の善し悪しなんてその人次第だからなあ、とか言い出したらなんも言えなくなる。
0762デフォルトの名無しさん2013/10/13(日) 18:25:42.88
>>756
1時間くらいで答えが帰ってくるほど人いないよ。

おれは、たのしいRubyが好きだな。
プログラミング言語Rubyは2.0は出ないんだろうか。
0763デフォルトの名無しさん2013/10/13(日) 18:44:05.55
まつもと先生は何をしてお金を稼いでいるのですか
やっぱり講演だけで食ってるんですかね
俺も金持ちになりたいので日本を代表するまつもと先生にあこがれてます
あとdankogaiさんとか堀江さんとかいますけど
こういう人は何で儲けてるんですかね
プログラミングができるだけじゃ食っていくのは難しいのでしょうか?
そりゃそうですよね
今は高校生でプログラミングする人おおいですもんね
0764デフォルトの名無しさん2013/10/13(日) 18:49:09.96
>>763
ひとつだけいえることは,
今,君が「プログラミングで儲けている」という人も
またプログラミングで名声を得ている人ですらも
「その人自身は,はじめた当初はそれを全然期待していなかった」
ということだね
0765デフォルトの名無しさん2013/10/13(日) 20:11:48.13
桐島、Rubyやめるってよ
http://magazine.rubyist.net/?0042-FollowUpKirishimaRuby
>ヒロキは某社内では人並み以上にプログラムが書ける自信があり、実際にエースとし
>て扱われているわけです。 しかし、ヘタに人並み以上にプログラムが書けてしまう
>がゆえ、自分が「スゴイ級」のプログラマではないことも痛感していました。 天才
>ハッカーみたくイノベーティブなプロダクトを作れる気がしなかったのです。 その
>ため自分がこれから先、何を目的にプログラミングをしていけばよいのか意味を見い
>だせなくなっていました。

これもおもしろいよ。
0766デフォルトの名無しさん2013/10/13(日) 20:34:43.10
Webサービス開発現場から / 近頃の開発のやり方 ・・・ Github と Pull Request とコードレビュー -
naoyaのはてなダイアリー:
http://d.hatena.ne.jp/naoya/20131013/1381651545

内容云々以前に写真に写っているのは見事にMacばかりだなぁ。
まあOSXの方がWinより都合が良いよね。
0767デフォルトの名無しさん2013/10/13(日) 20:44:21.17
>>764
>「その人自身は,はじめた当初はそれを全然期待していなかった」
>ということだね

こういう無欲たれみたいなことをいうけど、結構綺麗事で実は個人的な成功への欲求って重要なんじゃないの?

ノーベル賞も裏では苛烈な嫉妬や競争渦巻く世界らしいじゃん。
0768デフォルトの名無しさん2013/10/13(日) 20:57:27.11
>>761
レストランとはちょっと違うんじゃない。
Javaやってた人にはわかりやすくても、C言語しかやってない人にはさっぱりわからない本とかもあるだろうし。
好みじゃなくて、対象を絞って書かれているから。
0769デフォルトの名無しさん2013/10/13(日) 20:58:31.92
それはないな。
逆はあるかも。
0770デフォルトの名無しさん2013/10/13(日) 21:00:31.17
失敗してノーベル賞もらった人なんているのかな?
0771デフォルトの名無しさん2013/10/13(日) 21:01:16.56
>>766
これはさすがにnaoya宣伝乙って言われても仕方ないよね
0772デフォルトの名無しさん2013/10/13(日) 21:03:43.44
naoya 氏はこんなところで宣伝する必要が皆無なのでそんなこと言われないと思う
0773デフォルトの名無しさん2013/10/13(日) 21:05:43.06
本人降臨wwwwwwwwwww
0774デフォルトの名無しさん2013/10/13(日) 21:17:19.66
>>770
科学系の場合
失敗してそれが成功のきっかけっていうのが
ノーベル賞選定の条件にあるらしいよ
0775デフォルトの名無しさん2013/10/13(日) 21:20:40.94
naoyaってだれだそそんなに有名じゃねえだろ
0776デフォルトの名無しさん2013/10/13(日) 21:28:50.54
>>767
>こういう無欲たれみたいなことをいうけど、結構綺麗事で実は個人的な成功への欲求って重要なんじゃないの?
>
>ノーベル賞も裏では苛烈な嫉妬や競争渦巻く世界らしいじゃん。

とても分かりやすい比喩だね、某半島国家のノーベル賞事情とまったく同じ構図だ.....

普通の国(日本を含む):
  知性的探究心と世界貢献のために研究に励んでいたら、気がつけばノーベル賞を次々と受賞

某半島国家:
  個人(ないし国家)が受ける称賛への強烈な渇望により、ノーベル賞獲得を目指して
  苛烈な嫉妬や競争を繰り広げたあげく、未だにノーベル賞ゼロ記録を絶賛更新中w
0777デフォルトの名無しさん2013/10/13(日) 21:29:50.73
>>770
みんながこうだと思ってるような本命予想を証明する研究の場合、規模の勝負になりやすい

カミオカンデとか素粒子を検出するだけでアホみたいな巨大な設備要するし

物事が予想通りに進むだけなら、単純に規模が大きい方が体力の差で押し勝つだけになってしまう

科学に限らずどの分野でもそうなんじゃないか?
0778デフォルトの名無しさん2013/10/13(日) 21:31:46.17
カミオカンデで理論が証明されると誰がどれだけ儲かるの?
0779デフォルトの名無しさん2013/10/13(日) 21:34:39.87
>>775
naoyaさん知らないのか
Ruby初心者スレッドで名無しの振りして宣伝してた偉人じゃないか
0780デフォルトの名無しさん2013/10/13(日) 21:37:17.13
>>778
光センサーの浜松ホトニクスと東大の宣伝になるぐらいで誰かが儲かるってことは特に無いんじゃないか知らんけど
0781デフォルトの名無しさん2013/10/14(月) 06:18:55.29
>>745
DXrubyなりSTARrubyなり、探せばいくらでもGUIライブラリあるだろ
0782デフォルトの名無しさん2013/10/14(月) 09:17:06.32
Ruby/Tk
かんたんだよ
いろんなかきかたがあってとまどうけど
0783デフォルトの名無しさん2013/10/14(月) 10:29:58.54
gollumってさあるじゃないですか
gitでデータを管理するwiki
あれってどうやってgitからデータを取得しているんですか?
コマンドラインにgit logみたいなのを渡して結果を取得してる感じですか?
それともgitにはそういうapiがあるのですか?
0784デフォルトの名無しさん2013/10/14(月) 10:30:26.50
>>778
人類が月に行けても、人類そのものとして、行ったことそのものとしては「儲からなかった」のと同じ
月になにかがあったわけでもないし、道中結構人死んでるし、開拓航路のようになにか持ち帰って売れたわけじゃない
0785デフォルトの名無しさん2013/10/14(月) 11:20:44.75
そうだな
未開の宇宙人に出会って
高価なものをだまくらかして安値で買って来て
こっちの糞価値のものをあっちで高値で売って来るのが貿易だよな
0786デフォルトの名無しさん2013/10/14(月) 11:43:54.81
月旅行も同じで、月面では豊富にある重水素を地球に持ち帰れば高値で売れる
現在の課題は輸送コストと核融合の実現だけど、それらがクリアできれば....
0787デフォルトの名無しさん2013/10/14(月) 15:39:15.12
rubyってinvalidな文字列を取り除くメソッドってないのか?
一旦内部エンコーディングとは別の文字コードにinvalidオプション付きのencodeで変換して
そこからもう一度内部エンコーディングの文字コードにencodeとかアホか
0788デフォルトの名無しさん2013/10/14(月) 16:34:14.61
>>787
2.1で String#scrub というのが追加される。
プレビュー版で使えるので使用感を試して見てくだされ。
0789デフォルトの名無しさん2013/10/14(月) 16:36:29.84
scrub導入の経緯: http://bugs.ruby-lang.org/issues/6752
0790デフォルトの名無しさん2013/10/14(月) 17:32:14.68
>>782
tkでorcaしてみたけど単純なアプリでも起動にごっつり時間かかるのが泣けるなあ…
0791デフォルトの名無しさん2013/10/14(月) 17:36:00.19
すまんocraだった
0792デフォルトの名無しさん2013/10/14(月) 19:20:23.57
>>767
>>776
日本を含む東アジアは似たようなもんだよ.
日本人が自国の研究に対して手放しに評価することはほとんどない.田中耕一氏の場合も海外からの推薦だったという.

ただし,東アジアでダントツに日本の受賞が多いのは,それだけ優れた研究がなされていたということではある,それは誇っていいのだろうね.
ruby もおんなじだね.
0793デフォルトの名無しさん2013/10/14(月) 19:21:59.80
>>786
月面上でエネルギーに変換して地上に送る,と思うよ.もう核炉を地球上に作らせてもらえる時代じゃないよ…
0794デフォルトの名無しさん2013/10/14(月) 21:13:48.85
rubyは学ぶ価値がありますか?
0795デフォルトの名無しさん2013/10/14(月) 21:32:44.93
単体では特にはないです
その点ではコンピュータプログラム言語はみんな同じだけども
0796デフォルトの名無しさん2013/10/14(月) 21:44:36.41
日本生まれという以外にrubyの優位性は何かありますか?
0797デフォルトの名無しさん2013/10/14(月) 22:04:26.14
すべてのプログラミング言語の中でもっともRubyっぽい
0798デフォルトの名無しさん2013/10/14(月) 22:24:59.64
>>796
人によってRubyを好きになる理由はそれぞれだけど、
以下は自分の場合(比較対象は他のスクリプト言語)

・純粋オブジェクト指向言語である(ただし、Smalltakほどではない)
 * あらゆるすべてのデータがオブジェクトなので、柔軟なプログラミングができる
 * 最初からオブジェクト指向たることを目的に設計されているので、
  素直なオブジェクト指向プログラミングができる(OOPの学習にも適している)
  たとえば手続き型言語に後からオブジェクト指向を接ぎ木したPerlにはblessが、
  Pythonには__self__といった意味不明な規則があるけど、Rubyにはそれが無い

・関数型プログラミングに適している(Matzによれば、Rubyの先祖はLispであるとのこと)
 * あらゆるすべての構文が式なので、柔軟なプログラミングができる
  たとえばPythonでは同じ条件分岐でも文と式を使い分けなければならないけど
  Rubyでは気にする必要が無いし、同じくPythonのラムダ式の本体に変数宣言が書けない
  といった(後から関数型を接ぎ木したことを要因とする)制限が無い
 * Smalltalkから引き継いだブロック構文により、高階関数を簡潔に書ける

あと個人的には、Raccという完成度の高いパーザジェネレータが初期(=1.6の時代)から
存在した事も、Rubyを選んだ(=Perlから乗り換えた)理由として大きかった(そして、今でも大きい)
0799デフォルトの名無しさん2013/10/14(月) 23:53:11.29
HTML+CSS+Javascript+PHPと比較するとRubyはPHPに取って代わるものという認識でいいんでしょうか?
0800デフォルトの名無しさん2013/10/15(火) 00:14:55.94
パフォーマンスは他の言語と比べて仕様上よろしくない
あと言語経験少ない人から見た可読性もよろしくないからチームの開発に向いてない
ただ書いてて楽しい黒魔術面白すぎだは
0801デフォルトの名無しさん2013/10/15(火) 01:05:42.63
黒魔術に興味あるならC++しかない。
0802デフォルトの名無しさん2013/10/15(火) 01:09:48.53
>>799
いいえ
0803デフォルトの名無しさん2013/10/15(火) 06:51:25.47
>>802
要領を得ない答え方ですね
0804デフォルトの名無しさん2013/10/15(火) 07:43:20.90
JavaScriptにリソースが集まってるんだから普通に考えたらJavaScriptを使った方が幸せになれる
もはやRubyで幸せになれるのはRubyを作ってる連中だけなんじゃないの?
という希ガス
0805デフォルトの名無しさん2013/10/15(火) 07:47:22.45
javascriptを触ってみてjavascriptだけでいいなんて言う奴がいるとはとても思えないくらいjavascriptはクソ言語
0806デフォルトの名無しさん2013/10/15(火) 07:48:43.96
宗教論争を隔離するためにスレがわかれたというのにお前らときたら…
0807デフォルトの名無しさん2013/10/15(火) 08:09:34.29
テキストファイル処理などのワンライナーをとても書きやすい言語の一つなので
これをメインの言語として勉強したりこれを使って使って大きなものを書く予定が
無くとも、第二言語や便利な小道具として知っていて損はない言語。
0808デフォルトの名無しさん2013/10/15(火) 10:52:56.45
そういう意味ならRubyじゃなくてもいい
Rubyの代わりいくらでもある
0809デフォルトの名無しさん2013/10/15(火) 13:07:57.21
>>808
じゃあ他の言語使え
無理すんな
0810デフォルトの名無しさん2013/10/15(火) 13:12:13.93
うんそうしてる

とか書くと
なんでこのスレ見てんだ
とか言うんだろうな
きもいな
0811デフォルトの名無しさん2013/10/15(火) 13:15:10.35
>>810
なんでこのスレ見てんだ
08121/22013/10/15(火) 14:51:07.24
class Hoge
def self.connect(module_name_str)
cap = module_name_str.capitalize.to_sym
con = self.const_get(cap)
HogeHoge1.class_eval("include #{con}")
HogeHoge2.class_eval('include #{con}")
HogeHoge1.new
end

class HogeHoge1
end

class HogeHoge2
end

module Setting1
end

module Setting2
end

...

end

---------

foo = Client.connect("setting1")
foo.unkochinkomanko ...
08132/22013/10/15(火) 14:51:59.10
こんな感じで動的にモジュールをインクルードしてるんだが
モジュールの中にはHoge1だけで使うメソッド、Hoge2だけで使うメソッド、両方で使うメソッドが存在していて
これだと不必要なメソッドまでインクルードしてしまうということで分離したい

ただモジュール自体を分離することはなるべく避けたい
(モジュールの更新、追加時に余計な手間がかかるため)

モジュールのメソッドのアクセス制御をインクルードされるclass別に設定するみたいなことって出来ないんだろうか?
このモジュールのメソッドはHoge2にインクルードしてもHoge1からしかアクセス出来ないよーみたいな
もしくは設計そのものを見直すかうーん
0814デフォルトの名無しさん2013/10/15(火) 14:58:20.67
× foo = Client.connect("setting1")
○ foo = Hoge.connect("setting1")

こうだなすまん
あーなんでめんどくせー他人の尻拭いせにゃならんのだ
0815デフォルトの名無しさん2013/10/15(火) 15:37:52.99
include の挙動は append_features に従うので、
再定義したらうまいこと出来るような気がする。
0816デフォルトの名無しさん2013/10/16(水) 20:47:08.63
>>798
青木峰郎さんに感謝やな
彼はドラゴンブック参考にしたらしいけど
一橋大学出た文系プログラマってとこもミソな
0817デフォルトの名無しさん2013/10/17(木) 22:06:11.34
配列じゃなかったら配列を返すメソッドって何かありませんでしたっけ?

id_array = Array.try_convert(id) || [id]

みたいに書くのまどろっこしくて。
0818デフォルトの名無しさん2013/10/17(木) 22:12:18.46
Array(id_array)
0819デフォルトの名無しさん2013/10/17(木) 22:18:39.39
>>818
それだ!
0820デフォルトの名無しさん2013/10/17(木) 23:10:59.63
やめといたほうがいいと思うなあ
やめといたほうがいいと思わないなら止めないけど
0821デフォルトの名無しさん2013/10/17(木) 23:35:11.10
1234 abc
5678 def
という内容のtest.txtみたいなファイルを作ります。

で、rubyのワンライナーで
ruby -Ku -n -e 'print if /¥d¥d¥d¥d¥d/' test.txt
と入れます。
行頭が5桁の数字にマッチするので、何も出力されないのが正解なはずです。
Mac OSでは確かにそうなるのですが、WinXPにインストールしたRubyだと
マッチして両方の行が表示されてしまいます。
何が違うんでしょうか?
0822デフォルトの名無しさん2013/10/18(金) 00:39:01.62
コマンドプロンプトの '...' はとんでもない挙動だった覚えが
0823デフォルトの名無しさん2013/10/18(金) 07:56:40.88
コマンドプロンプトなら "〜" だね
ワンライナー内でダブルクォート文字列使いたい時は qq 使う
0824デフォルトの名無しさん2013/10/18(金) 14:35:02.14
「数字が5つ連続して存在している行を表示」
なので表示されるのが正常動作

なぜMacだと表示されないのだろうか?
Windowsしか所持してないのでわからない

Ruby自体は、自前でコマンドラインをパースしなおすから '' でも ""でも大丈夫だが
CMD.EXEは ""しか認識しないので 特殊文字を引数にしたいときには注意
ついでにファイル名補完もRubyがやってくれて
(UNIXのshellみたいな)Dir.globと同仕様なので何気に便利
ruby hoge.rb foo{1[89],2[012]}.txt
とかできる
0825デフォルトの名無しさん2013/10/18(金) 16:31:03.52
>なぜMacだと表示されないのだろうか?
¥になってるというオチで終了
0826デフォルトの名無しさん2013/10/18(金) 18:30:28.29
5つだからマッチしないんでしょ
XPでも表示されなかったぞ
0827デフォルトの名無しさん2013/10/18(金) 18:48:17.00
んなアホな、と思ったが再現するなw
元の文がわかりづらいが、Windowsのコマンドプロンプトで表示されるのがおかしいという意味だね
俺のはLinuxのシェルだが、そこでマッチしないのがコマンドプロンプトではマッチする
シングルクオートで囲まれた領域で-eオプションだと、プログラム本文と同一ということだと思っていたが、違うんだな
詳しい人の解説&追試求む
0828デフォルトの名無しさん2013/10/18(金) 18:52:38.41
824 が言ってることがわからん。
821が書いた数字は4連続なんだが。
単に勘違いか。

俺はMacしか持ってないから確認できない。
$& でマッチした文字列を表示してみたらどうなる?
0829デフォルトの名無しさん2013/10/18(金) 18:55:53.05
再現するバージョン教えて
0830デフォルトの名無しさん2013/10/18(金) 20:31:04.43
>>827
>>823って事じゃないの?
0831デフォルトの名無しさん2013/10/18(金) 21:14:49.79
>>830
Win8 + Ruby2.0.0 で試したけど " と ' どっちで括っても再現しなかった

とりあえず再現できる人の OS と ruby -v が知りたい
0832デフォルトの名無しさん2013/10/18(金) 21:38:08.51
正規表現で盛り上がっているところ、水をさして申し訳ありませんが

Win32APIを使ってクリップボードから文字列の値を取得したのですが、
どうも上手く行きません。
クリップボードは空になっているようなのでEmptyClipboardは働いているようなのですが…
どこがおかしくて、どう直せば動くでしょうか?

環境はWin7 64bit Ruby-2.0.0です。

主にここを参考にしました
ttp://d.hatena.ne.jp/nagachika/20100419/ruby19_dl2_windows_clipboard


以下プログラムリスト
0833デフォルトの名無しさん2013/10/18(金) 21:38:42.86
OpenClipboard = Win32API.new("user32", "OpenClipboard", ["I"], "I")
CloseClipboard = Win32API.new("user32", "CloseClipboard", [], "I")
SetClipboardData = Win32API.new("user32", "SetClipboardData", ["I", "I"], "I")
EmptyClipboard = Win32API.new("user32", "EmptyClipboard", [], "I")

CF_TEXT = 1

GlobalAlloc = Win32API.new("kernel32", "GlobalAlloc", ["I","I"], "I")
GlobalLock = Win32API.new("kernel32", "GlobalLock", ["I"], "P")
GlobalUnlock = Win32API.new("kernel32", "GlobalUnlock", ["I"], "I")
GlobalFree = Win32API.new("kernel32", "GlobalFree", ["I"], "I")

GMEM_MOVEABLE = 2
GMEM_ZEROINIT = 0x40
GHND = GMEM_MOVEABLE + GMEM_ZEROINIT

Lstrcpy = Win32API.new("kernel32", "lstrcpy", ["P", "P"], "P")
0834デフォルトの名無しさん2013/10/18(金) 21:39:18.34
def set_text(t)
return if t == "" || t == nil
sleep 0.2 while OpenClipboard.call(0) == 0
begin
if handle = GlobalAlloc.call(GHND, t.bytesize + 1)
begin
if ptr = GlobalLock.call(handle)
Lstrcpy.call(Fiddle::Pointer[ptr], Fiddle::Pointer[t])
EmptyClipboard.call
SetClipboardData.call(CF_TEXT, handle)
GlobalUnlock.Call(handle)
end
rescue
GlobalFree.call(handle)
end
end
ensure
CloseClipboard.call
end
end
0835デフォルトの名無しさん2013/10/18(金) 22:22:08.75
>>828
勘違い

コピペせずに
適当に5桁の数字入れてた
0836デフォルトの名無しさん2013/10/18(金) 22:38:18.31
>>821
WinXP Ruby1.8.7
再現しない(表示されない)
0837デフォルトの名無しさん2013/10/19(土) 06:02:25.45
gsubにてマッチした数値を使用して計算した結果に置き換えるには
置換文字列をどうすればいいのでしょうか?

できなかった例(値を2倍)
hoge='Q=123'
print hoge.gsub(/Q=(\d+)/,'Q=\1*2')
0838デフォルトの名無しさん2013/10/19(土) 07:53:24.96
別にgsubでなくてもいいんじゃないの、てのはおいておいて
文字列を数値または式に変換する必要がある

前者なら、数値部分だけを数値変換
Q = hoge.sub(/Q=(\d+)/, '\1').to_i * 2

後者なら全体を式として評価
eval(hoge.sub(/Q=(\d+)/, 'Q=\1*2'))
0839デフォルトの名無しさん2013/10/19(土) 08:38:19.77
ブロック使えば
0840デフォルトの名無しさん2013/10/19(土) 09:27:17.37
例に対してはこんな風には書けるけど、
これがやりたかった事なのかは疑問

hoge.gsub(/(?<=Q=)\d+/) {|s| s.to_i * 2 }
0841デフォルトの名無しさん2013/10/19(土) 09:49:15.56
そこは /Q=(\d+)/ に $1.to_i でしょ
0842デフォルトの名無しさん2013/10/19(土) 12:22:51.73
subはブロック使う癖つけといた方が吉
0843デフォルトの名無しさん2013/10/19(土) 15:28:03.08
無理に1行にしなくて変数に移してから数値に変換した方があとから分かりやすいと思う。
0844デフォルトの名無しさん2013/10/19(土) 20:45:44.48
デバッグはどうしてる?
俺は主にprint文のデバッグなのだが
0845デフォルトの名無しさん2013/10/19(土) 20:58:06.84
lexなりyaccなり好きにしろ
0846デフォルトの名無しさん2013/10/19(土) 21:16:16.45
>>844
pryかわいいよpry
0847デフォルトの名無しさん2013/10/19(土) 21:20:23.61
>>846
pryなんて初めて知った。
なんか良さげだね。ありがとう。
0848デフォルトの名無しさん2013/10/20(日) 01:16:31.38
一ヶ月前にpryデバッグ環境作ろうとして、
pry-nav→pry-debugger→pry-byebugというdeprecated巡りを一通りしてしまった
0849デフォルトの名無しさん2013/10/21(月) 14:06:12.08
ハッシュの配列を1つのハッシュに変換するメソッドを探してるのですが、ありますか?
今はこう書いています。キーが重複した時のことは考慮しなくてよいです。

array = [{id: 1, name: "hoge"}, {id: 2, name: "piyo"}]
hash = Hash[array.map {|item| item[:id] }.zip(array)]
0850デフォルトの名無しさん2013/10/21(月) 14:47:57.21
hash = array.inject({}) { |h, a| h[a[:id]] = a; h }
とか
hash = array.each_with_object({}) { |a, h| h[a[:id]] = a }
とか?

なんかあんまりスマートじゃないね
ごめん
0851デフォルトの名無しさん2013/10/21(月) 15:01:31.38
hash = array.inject({}) { |ran_hash, dom_hash|
  ran_hash.merge(dom_hash[:id] => dom_hash)
}
0852デフォルトの名無しさん2013/10/21(月) 21:35:17.35
Hash[array.map {|item| [item[:id], item]}]
0853デフォルトの名無しさん2013/10/21(月) 23:53:40.50
分かりづらいデータ構造は使わない
0854デフォルトの名無しさん2013/10/22(火) 00:28:10.46
array.map{|i|{i[:id]=>i}}.inject({},:merge)
0855デフォルトの名無しさん2013/10/22(火) 11:47:43.96
ピンポイントなメソッドはないみたいですが、zipは使わなくてもよいですね。

ありがとうございます!
■ このスレッドは過去ログ倉庫に格納されています