1 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 08:39:14 ] プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。 ★注意★ Ruby 1.9.1 は初心者にはまだ時期早尚です。初心者には Ruby 1.8.7 を強くお勧めします。 (理由:現時点では多くの有名ライブラリやアプリが 1.9.1 に完全対応していないためです。) 1.8.7 でも 1.9 系に導入された新機能のいくつかが利用可能なため、1.8.7 を習得すれば将来スムーズに 1.9 系に移行できるでしょう。 関連スレやURLは>>2-5 あたりを見てください。Ruby on Rails の質問は Webプログラミング板の Rails スレへ。 ■質問する人へ 質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。 ・モジュール名やエラーメッセージでググる ・マニュアルで引っかかったクラスの記述を探す www.ruby-lang.org/ja/man/ ・FAQを一応読む www.ruby-lang.org/ja/man/?cmd=view;name=Ruby+FAQ 質問には以下を書くこと。へたくそな質問は再提出を要求される。 ・詳しい内容(「動きません」「うまくできません」では回答しようがない) ・エラーメッセージ(自力で訳さずなるべくそのままで) ・実行環境(OS名、Rubyのバージョン(ruby -v でわかる)) ・最終的にやりたいこと(もっとよい方法がある場合が多いので) 回答してくれた人には「ありがとう」のひとことをいってあげて。 ■回答する人へ 相手は初心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。 それができないならこないこと(だって初心者スレだもん)。 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。
32 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 20:03:12 ] /(?:[^",]*"[^"]*"[^",]*)+|[^,]+/ こんな感じニカ?
33 名前:デフォルトの名無しさん [2010/01/28(木) 21:18:59 ] 鬼車の田中哲スペシャルってこーゆーとき活用できるもん?
34 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 21:41:50 ] 面倒臭いから区切りを " " にするよう説得して Shellwords.shellwords を使う。だめか。 CSV だと思って CSV.parse_line する。だめだって。通らないし。
35 名前:デフォルトの名無しさん [2010/01/28(木) 21:50:19 ] 問答無用で , で豚切りしてから、 " を含む物から次の " を含むものまでを , で連結したものに置換える。
36 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 22:19:46 ] >>35 それだと分割したリストを"求めて尋ねる歩く旅に出ないといけなくなるわけだが・・・
37 名前:デフォルトの名無しさん mailto:sage [2010/01/28(木) 22:52:03 ] 基本、このタイプは無闇にめんどくさい
38 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 06:11:42 ] RubyはC言語で出来ているのでしょうか?
39 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 06:42:16 ] >>38 そうだよ。なんならソースをダウンロードして中身をのぞいてみたら? それを知ってどうするのかは知らんけどさ。
40 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 08:35:40 ] それでも鬼車なら・・・鬼車ならきっと何とかしてくれる
41 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 10:03:32 ] Ruby 初心者スレッド Part 33 pc12.2ch.net/test/read.cgi/tech/1259990485/998 > 998 名前:デフォルトの名無しさん[sage] 投稿日:2010/01/27(水) 09:38:00 > Rubyですごい事が出来た実例を教えて下さい。 Ruby(Rails)で上場しちゃった会社(というと語弊があるがw) クックパッド(株)【2193】:銘柄情報 - Yahoo!ファイナンス stocks.finance.yahoo.co.jp/stocks/detail/?code=2193
42 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 10:59:48 ] > 998 名前:デフォルトの名無しさん[sage] 投稿日:2010/01/27(水) 09:38:00 > Rubyですごい事が出来た実例を教えて下さい。 昔から使ってる人間としては、Rubyで生計を立ててる人がいる時点で信じられん
43 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 11:16:40 ] >>42 20年も経てば、あなたがたはRubyに税金をかけるようになるでしょう
44 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 11:18:45 ] >>18 出遅れた気がするけど、 str = 'first,second"a,b,c"second,third' str.scan(/(?:^|\G,)([^",]*(?:"[^"\\]*(?:\\.[^"\\]*)*"[^",]*)*)/).map{|a|a[0]}
45 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 11:19:48 ] >>43 すでに未踏経由で1000万以上税金突っ込ん出るよ、その成果の一つがYARVだ
46 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 11:35:56 ] >>43 いや電気ほどにはすごくないw
47 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 11:56:00 ] ファラデーか
48 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 13:57:49 ] str.scan /(?:[^",]|"[^"]*?")+|(?=,,|^,|,$)/
49 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 14:27:24 ] メンテナンスしたくない正規表現が続々届いております
50 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 14:31:56 ] 正攻法は>>25 、LLっぽいのは>>35 だと思う
51 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 14:36:07 ] >>49 ちょっと変えたいときに悲惨だな これくらいは読めて欲しい気もするが
52 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 15:51:35 ] \Gの使い方がよくわからなかった自分としては>>44 が勉強になった
53 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 15:53:13 ] 最終的には読めて欲しい 初級を脱したと思ってる人は読めて欲しいなー
54 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 16:34:07 ] 読めても変えたくないエンバグしそう
55 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 16:36:13 ] >>44 の修正、一般にCSVでは"のエスケープは"" str.scan(/(?:^|\G,)([^",]*(?:"[^"]*(?:""[^"]*)*"[^",]*)*)/)
56 名前:27 mailto:sage [2010/01/29(金) 16:45:09 ] ↑ なるほど。勉強になったthx
57 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 19:46:41 ] >>49 正規表現をくれということだから仕方ない
58 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 20:15:46 ] mingw版のRuby1.8.7バイナリって特にはない? 自力でMinGW導入して手元でコンパイルするしかないのかな
59 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 20:30:14 ] コンパイルしてみたら? きっと親切なおじさんたちが助けてくれるさ
60 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 21:07:20 ] えー ひとつだけ質問 Net::HTTPSが使うOpenSSLやirbが使うReadlinesとかは放っておいても入る? んなわけないよね別途用意しなきゃ駄目だよね
61 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 21:39:37 ] gnuwin32.sourceforge.net/packages/openssl.htm gnuwin32.sourceforge.net/packages/libiconv.htm gnuwin32.sourceforge.net/packages/readline.htm gnuwin32.sourceforge.net/packages/pdcurses.htm gnuwin32.sourceforge.net/packages/zlib.htm gnuwin32.sourceforge.net/packages/gdbm.htm リンク先を見てわからないなら諦めた方がいいかもしれない。 怖くてリンクを踏めないという見解もありうる。
62 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 21:41:31 ] %w記法で空文字列の要素はどうやって作るの?
63 名前:60 mailto:sage [2010/01/29(金) 21:44:46 ] C:\Documents and Settings\俺\デスクトップ>gem install rake C:/usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_origin al_require': no such file to load -- zlib (LoadError) うひょう
64 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 21:44:57 ] %Wならできるが、%wでは無理だね
65 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 21:45:46 ] %wじゃむりじゃね? 大文字の方なら p %W[hoge fuga #{nil} ] #=>["hoge", "fuga", ""]
66 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 21:53:29 ] 式展開じゃないとダメか #{nil}はnilになるのかと思ったら""なのね。何で? nil要素は作れない?
67 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 21:57:08 ] 要素が文字列である配列を作る記法だからでしょう またレスかぶりそう
68 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 22:05:56 ] 了解。みんなありがと
69 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 22:11:45 ] >>66 irb(main)> "#{nil}" => ""
70 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 22:25:58 ] >>58 いろいろあったんだが、Windowsの場合は自分だけMinGW32にしても意味がない、という結論に至った 配布されてるバイナリのバージョンと揃えておいて、同じようにエラー出したり同じように変な動きしたりするほうがいい
71 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 22:30:02 ] 普段CをMinGWでコンパイルしていて Rubyの拡張ライブラリもMinGWでコンパイルしたいんだもん という人がRubyをMinGWでコンパイルしているんだと思う。 あとメンテナか。
72 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 22:36:41 ] これからMinGWにしてこうぜー、という動きがあるのはある気がするが 「よくわかんないいっぱんゆーざー」がわざわざコンパイルしてまで使用するようなもんでもない ただしMinGWの知識がある人はどんどん使って色々言ってくれ
73 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 23:09:14 ] class NiseArray < Array; end a = NiseArray.new p a.class #=> NiseArray b = a.map{} p b.class #=> Array bがワナビーNiseArrayなんだがドゥーしたらいいんだ? オレにティーチしてくれよ。
74 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 23:25:11 ] セルフのクラスのオブジェクトをリターンするようにデファインされてないんだよな 継承を考慮してないもともとのクラスのデザインのミステイクではある
75 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 23:31:20 ] Enumerableはeachさえあれば配列じゃなかろうと動くようにしてあるんだから仕方ない ArrayのメソッドならちゃんとNiseArrayが返すはず
76 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 23:36:39 ] ビルトインクラスは普通のオブジェクトと微妙に構造が違うから継承すんなボケ、 っつーかお前のそのクラスはビルトインクラスを継承するだけの動作をするのか、あー? という怖い感じのが一応スタンス メソッドが欲しいだけなら普通は委譲を使う
77 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 23:39:33 ] 委譲遅いじゃん はい論破
78 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 23:41:22 ] 委譲とかあのへんは遅いよね 継承を使いたくなるくらい遅いというのは実効上の説得力がない
79 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 23:41:44 ] この例に限って言えば dup/clone してから map! すりゃいいんじゃね
80 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 23:44:04 ] >>78 ディスパッチテーブルを もう一回引く程度のコストが許容できないなら その問題にRubyは使えないんじゃないかね
81 名前:73 mailto:sage [2010/01/30(土) 00:17:48 ] Arrayオリジナルのメソッドでcollect/mapとselectはNiseArrayではなくArrayを返す。 ほかはNiseArrayを返す。 あとEnumerableは基本的にArrayを返す。 これらは継承では全滅ということでOKですか? delegateに馴染みがないので軽いサンプルをいただけると助かります。 もちろん自分でリファレンスマニュアルを読んでみます。
82 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 01:32:52 ] >>81 自作ライブラリのコード漁ってたらこんなの出てきた でも、正直これは設計ミスだったと思ってる %w{ find_all reject select sort sort_by }.each do |method| class_eval %{ def #{method} self.class.new(super) end } end %w{ & * + - grep }.each do |method| class_eval %{ def #{method}(arg) self.class.new(super) end } end
83 名前:82 mailto:sage [2010/01/30(土) 06:10:54 ] 話の流れ上 delegate のサンプルを貼るべきところだったな、ごめんw 継承するとこうなるぞってことで
84 名前:73 mailto:sage [2010/01/30(土) 10:50:29 ] #-----hoge1.rb class NiseArray < Array instance_methods.each do |method| define_method(method) do |*args, &block| result = super(*args, &block) result.class == Array ? NiseArray.new(result) : result end end end p NiseArray.new.map{}.class #=> NiseArray #-----hoge2.rb require 'delegate' class NiseArray < DelegateClass(Array) def initialize super(Array.new) end end p NiseArray.new.map{}.class #=> Array #なんでノットNiseArrayなのかミーにはホワイなんです><
85 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 14:01:51 ] class A def initialize(a=Array.new); @a=a; end def method_missing(*arg, &block); A.new(@a.__send__(*arg, &block)); end def to_a; @a; end def to_ary; @a; end end irb> a = A.new([1, 2, 3, 4, 5]) irb> a.delete(5) irb> p a #<A:0xb7cf21c0 @a=[1, 2, 3, 4]> irb> p a.map{|e| e*2} #<A:0xb7cecb30 @a=[2, 4, 6, 8]> irb> p a.class A irb> p a.to_a [1, 2, 3, 4] irb> p Hash[*a] {1=>2, 3=>4}
86 名前:73 mailto:sage [2010/01/30(土) 14:46:42 ] おおお素晴らしい 鮮やかに委譲してますね。 しかも直感的でわかりやすい。 #all?など返り値が委譲先のオブジェクトでないメソッドも少し手直しすれば動きそうです。 勉強になりました。参考にさせてもらいます。
87 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 17:55:24 ] $KCODE='u' 'あ' =~ /\xe3/ #=> 0 'あ' =~ /[\xe3]/ #=> nil となります。 $KCODEを指定しないとどちらも同じ挙動になるんですが。 これは意図した動作なんでしょうか。 手元の環境は ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux] です。
88 名前:デフォルトの名無しさん [2010/01/30(土) 18:58:31 ] $KCODEのデフォルトは n なので、 $KCODE を設定しないということは 'あ' はただのバイト列として 0xe3 と比較される。
89 名前:デフォルトの名無しさん [2010/01/30(土) 19:11:04 ] おや、'u'のとき前者がマッチするのか…
90 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 22:20:20 ] p BasicObject === BasicObject #=> true p Class === Class #=> true p Module === Module #=> true p Object === Object #=> true p String === String #=> false p Array === Array #=> false p BasicObject.class #=> Class p Array.class #=> Class p Kernel === Kernel #=> true p Enumerable === Enumerable #=>false p Kernel.class #=> Module p Enumerable.class #=> Module なんで?教えてえらい人!
91 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 22:52:30 ] >>90 Module#===の定義をリファレンスで読むといいよ selfがモジュールとすると「obj.kind_of?(self) が true の場合、 true を返します」だとさ
92 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 23:00:03 ] 驚き最小!
93 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 23:21:41 ] >>90 ===
94 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 23:22:47 ] ミスったw === が再定義されているから case value when Integer when String end みたいに書けるんじゃないか
95 名前:デフォルトの名無しさん [2010/01/31(日) 00:08:03 ] Proc#===の定義は見ただけでは何を意図したものか分からなかったな…
96 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 07:39:30 ] ||= って何なんでしょう? 代入文みたいに a ||= {} 使うみたいな 辞書の割り当てとかでしょうか?
97 名前:デフォルトの名無しさん [2010/01/31(日) 07:55:53 ] Marshal.dumpでsingleton can't be dumpedというエラーになって悩んでます objの中身はライブラリから返されたもので詳細はわかりません p obj.class #=> Hash p obj.is_a? Singleton #=> false Marshal.dump(obj) #=> TypeError: singleton can't be dumped 以下はエラーになりませんでした obj.each {|k,v| Marshal.dump([k,v])} #=>エラーなし
98 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 08:13:23 ] >>97 そのエラー分かりにくいよね 特異メソッド(およびそれが定義されているオブジェクト)はダンプできませんよって意味 dupしたものをダンプするようにするか、自分で言ってるように中身だけ出すのが正解
99 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 08:40:37 ] >>96 これ書いてる解説少ないんだよな a がNameErrorを返すか、変数 a が存在して偽を返す場合、 a = {} を実行する という程度の意味 実際のスクリプトでは大量に使われているが、初心者用文法解説ではほとんど言及されていない謎の記述
100 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 09:18:07 ] >>96 a += 1 a = a + 1 a ||= {} a = a || {} a が偽と評価される場合に限り a = {} となり、それ以外のときは a = a 変数の初期化を保証するために使われることが多い
101 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 09:23:09 ] >>100 だいたいの意味はそうだからいいんだけど、厳密には a || (a = b) ってことになる ||= と &&= だけちょっと特殊 ってようなのをどっかで見た
102 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 11:13:45 ] >>101 doc.okkez.net/187/view/spec/operator#selfassign まあobj.foo = obj.fooに副作用がある設計のほうがどうかと思うけどな
103 名前:デフォルトの名無しさん [2010/01/31(日) 14:11:36 ] >>98 ありがとうございます objは再帰的なHashなようでdumpできないオブジェクトが入っている場所は一定ではないようです またTrueClassなどdupできないものも含まれているようです 一気に特異メソッドを取り除いてdumpする方法はないでしょうか?
104 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 14:26:44 ] 初めてRubyいじる必要が出てきて,このスレに来てみたが ここ初心者レベルじゃないね。 初心者抜け出して中級者に手が届こうとしてる人たち向けの 初心者脱出スレだな。
105 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 14:29:35 ] >>104 いや別に puts と p はどう使い分けるんですかみたいな質問でも構わないよ 全く知らないと小難しそうな領域に踏み込めるようになるまでの時間が短い言語だとでも思ってくれ 実行速度がスクリプト言語として普通なレベル(つまり速いわけではない)という点以外は初心者にやさしいほうだと思うけどね
106 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 14:41:46 ] 初心者の質問にでも 初心者抜け出して中級者に手が届こうとしてる人たちも含めていろんな人が答えるスレでしょ 初心者の質問がなけりゃそのちょっと上の会話になるさ
107 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 14:44:02 ] >>103 ライブラリ提供者が提供してないのなら目視で取り除くしかないよ 普通は dump というメソッドを作ってあったりするもんなんだけどね
108 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 15:15:55 ] >>104 大丈夫、そういう場合は自分のような脱初心者(+ニート)が回答するから。 ただ、2chだから超初心者質問には悪態をつく人間がいることは覚悟しておいたほうがいいかも。
109 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 16:12:23 ] 相手は人間だから、あんまり馬鹿っぽい質問じゃねえ。 それなりに調べて来ないと駄目でしょ。 思考停止して単位欲しいとかなら pc12.2ch.net/test/read.cgi/tech/1200175247/ Rubyの宿題教えてください。2限目 とか。
110 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 16:22:38 ] 自分の質問が馬鹿っぽいかどうかが分かるなら、 既にそいつは上級者だろw まあ確かに、自力で最低限ぐぐるくらいのことはしてほしいとは思う
111 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 16:26:38 ] 最近の質問はちょっとレベル高かったからなー むしろ私にも答えられるような初歩的な質問キボンヌ
112 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 16:33:04 ] >>103 Marshalじゃなくてyamlか何かでダンプするようにするのが一番楽
113 名前:デフォルトの名無しさん [2010/01/31(日) 18:48:05 ] オブジェクトの中身をろがーに吐かせたいんだけど inspectじゃなくてppみたいに見やすく文字列化してくれるやつない?
114 名前:デフォルトの名無しさん mailto:sage [2010/01/31(日) 19:23:46 ] >>113 require 'StringIO' require 'pp' h = { 1=> '1234567890'*5, 2=> '1234567890'*5 } sio = StringIO.new PP.pp(h, sio, 79) # 79文字までは改行しない sio.rewind puts '========================' puts sio.read puts で表示されてるのがわかるかと思う
115 名前:デフォルトの名無しさん [2010/01/31(日) 19:28:48 ] pretty_inspect
116 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 05:34:01 ] Rubyは今後10年使われますか?
117 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 06:17:43 ] >>111 てかRuby初心者スレは実質「Ruby質問スレ」と言ってもいい 超初心者からRubistまで、幅広く質問を受け付けるスレって感じがする …てか、もうスレタイ変えちゃって良いんじゃないか、ここ…?
118 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 11:38:19 ] 変えた途端に>>117 が業務上のプログラムの質問する事にでもなるのか?
119 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 11:43:54 ] アホが暴れたら高度な話題は本スレでと誘導できるからこのままでいいんだよ
120 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 20:18:47 ] 超初心者〜中級にちょっと届かない初心者 ぐらいしか質問してないだろう
121 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 20:38:06 ] 人の振り見て我が振り直せ。
122 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 21:02:33 ] Rubyっぽくして def sum key = nil sum = 0 while line = gets a = line.split(",") if key !=a[0] if key print "#{key} #{sum}\n" end key = a[0] sum = 0 end sum += a[2].to_i end print "#{key} #{sum}\n" end
123 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 22:15:25 ] 1時間経ってもスルーされてた理由をなんとなく理解
124 名前:デフォルトの名無しさん [2010/02/01(月) 22:56:47 ] >>123 たぶんその理解は間違い。
125 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 23:02:24 ] 実際に試した人→>>123 実際に手を動かさなかった人→>>124
126 名前:デフォルトの名無しさん [2010/02/01(月) 23:06:22 ] こういうのはRubyっぽいのか?? $stdin.lines.map {|l|l.chomp.split(/,/).values_at(0,2)}. group_by(&:first). each {|k,a|puts"#{k} #{a.map(&:last).map(&:to_i).inject(&:+)}"} >>123 がソート済みかどうかを考慮しているのかどうか疑問が残る。
127 名前:デフォルトの名無しさん mailto:sage [2010/02/01(月) 23:45:31 ] group_by初めて知った。旧リファレンスに無くて悲しくなった。 メモリ喰いっすね
128 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 00:10:11 ] Ruby/GTK2 でグラフをプロットするアプリケーションを作りたいと考えています。 ruby-gnome2.sourceforge.jp/ja/hiki.cgi?gtk2-tut-itemfactory-example ここにあるようなメニューとウィンドウを作ることはできたのですが、例えば month = [1, 2, 3, 4, 5, 6, 7, 8, 9 ,10, 11, 12] temp = [6.8, 7.8, 10.0, 15.7, 20.1, 22.5, 26.3, 26.6, 23.0, 19.0, 13.5, 9.0] というデータがあったときに、横軸に month を縦軸に temp をとったグラフをウィンドウの中に、直接表示するためにはどうすればよいのでしょうか? Windows XP ActiveScriptRuby環境です 最終的にはもっと長い(1000-10000点ほど)データがプロットしたいと考えています
129 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 00:37:22 ] >>128 良く使われる手法は 1.グラフ画像を生成してウインドウに貼る 2.描画可能なコンポーネントにプログラムで描画する の二つ 1.のグラフ画像生成は、画像処理ライブラリを使って自力でグラフを書くか グラフ生成ライブラリを使うかする 2.はruby/gtk使った事無いからリンク先から関係ありそうなところ > ttp://ruby-gnome2.sourceforge.jp/hiki.cgi?Gtk%3A%3ADrawingArea > ttp://ruby-gnome2.sourceforge.jp/hiki.cgi?Gdk%3A%3ADrawable
130 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 00:41:47 ] Tkの知識はあるんだよね
131 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 00:43:29 ] TkじゃなかったGTKだた どっちにしても指示をRuby上からやる、という以上のものではないんで GUIパーツの使い倒し方を知ってるのがけっこう前提
132 名前:デフォルトの名無しさん mailto:sage [2010/02/02(火) 00:58:08 ] >>129 ありがとうございます 素人考えですがポイント数が増えると 2. の方がいいのかなという気がするので、リンク先を読んでみます >>130 Tk もわかりません…