2ちゃんねる スマホ用 ■掲示板に戻る■ 全部 1- 最新50    

■ このスレッドは過去ログ倉庫に格納されています

Ruby 初心者スレッド Part 55

1 :デフォルトの名無しさん:2014/06/21(土) 23:39:44.94 ID:rKd1VvW8.net
プログラミング言語Rubyについての、初心者向けスレです。質問・要望・雑談などどうぞ。
質問するときは、OSやRubyのバージョン、エラーメッセージを書いたほうがいいお
RoRはスレ違いよ

前スレ
Ruby 初心者スレッド Part 54
http://peace.2ch.net/test/read.cgi/tech/1392598207/

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

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

逆引きRuby
http://www.namaraii.com/rubytips/

952 :デフォルトの名無しさん:2014/12/09(火) 22:02:10.16 ID:7jn1Y2FE.net
>>948
「作りながら・・」のほうは Ruby を使って何かアプリを作ろうとしている人にとって、
有益な良い書籍だね

一方、>>946 は(Amazon で目次レベルでの判断だけど、)
Ruby インタプリタそのものに興味がある人、
あるいは言語処理系(インタプリタやコンパイラ)の自作に興味がある人向けの本に見える

Ruby 1.8 向けには RHG(Ruby Hacking Guide) と呼ばれる本があって、
後者の人達には好評だった(とはいえ Ruby プログラマ全体からすれば一部だけど...)
・『Rubyソースコード完全解説』サポートページ
 http://i.loveruby.net/ja/rhg/
でも Ruby 1.9 で導入された仮想マシン(YARV)をベースにした RHG に相当する本は存在せず、
登場が長く待たれていた

>>946 があらゆる Ruby プログラマにとってすぐ役に立つ本だとは決して言えないけど、
いつも使っている Ruby の内部構造を知ることは将来的なステップアップにつながると思う
(車やバイクを趣味としている人が、エンジン等のメカニズムに興味を持つのと似ている)

953 :デフォルトの名無しさん:2014/12/09(火) 22:28:00.64 ID:zeFrRkpb.net
>>951
実装が仕様、とバッドノウハウがリンクする部分の論理がわからんのだが

954 :デフォルトの名無しさん:2014/12/09(火) 23:40:04.76 ID:u5JX9V0E.net
【IT】中高生Rubyプログラミングコンテスト開催 [14/12/08]?2ch.net
http://daily.2ch.net/test/read.cgi/newsplus/1418097669/

955 :デフォルトの名無しさん:2014/12/10(水) 00:31:41.98 ID:U+9OJfKH.net
YARVの作者の人も寄稿しているというのでそっちの詳しい話も読めるのかな、と
思ったら単に〜日でこんなの書けた俺スゲエ、って自慢話みたいな薄い内容でガッカリ
味付けは「みんなの参加も待ってるよ」といい感じに見せて実は単なる自慢だよなアレ

そういうのはどうでもいいからもっと技術的に実のあること書いて欲しかった。

956 :デフォルトの名無しさん:2014/12/10(水) 00:33:46.52 ID:QXcQ5EoT.net
>>955
そういう取り方しかできない人は何読んでも一緒だよ

957 :デフォルトの名無しさん:2014/12/10(水) 05:04:05.05 ID:+IoSb7+r.net
>>953
特定の実装のみに深く依存した知識やテクニックをバッドノウハウと呼ぶのはわりと普通だろ
プログラミングなんてバッドノウハウ覚えてなんぼの世界だが、程度問題だね

958 :デフォルトの名無しさん:2014/12/10(水) 05:17:46.52 ID:dRumJmjh.net
Ruby 初心者スレッド Part 55

959 :デフォルトの名無しさん:2014/12/10(水) 10:32:12.86 ID:4ySbe8P6.net
Rubyみたいな技術的負債生成言語
得意がって使っている頭の弱い人見ると
かわいそうになってくる

960 :デフォルトの名無しさん:2014/12/10(水) 14:39:23.04 ID:X/Vb7CZT.net
かわいそうに思ったらちゃんと優しくするんだぞ

961 :デフォルトの名無しさん:2014/12/10(水) 20:14:26.27 ID:qlA9G0h0.net
はあ
Ruby使ってて強い奴一杯いるから頭の弱いなんてことはないと思うが

962 :デフォルトの名無しさん:2014/12/11(木) 00:32:45.57 ID:KeFdm/Mm.net
vectorでn個要素を右にずらすみたな処理ってかけますか?
2個右にずらすなら、
v = Vector[0, 1, 2, 0, 0]
p v.slide(2) # => [0, 0, 0, 1, 2]
というイメージです。

今のところ、arrayで持っておいて、
v = [0, 1, 2, 0, 0]
original_length = v.length
p v.unshift(Array.new(2, 0)).flatten.take(original_length)
とやっています。

もっと綺麗な書き方があれば教えて下さい
Vectorには拘るわけではないので、どんな方法でも構いません

963 :デフォルトの名無しさん:2014/12/11(木) 00:43:54.20 ID:45mXFYqI.net
>>962
Array#rotate

964 :デフォルトの名無しさん:2014/12/11(木) 00:48:00.61 ID:45mXFYqI.net
あぁ、違うか

(Array.new(0, 2) + v).take(v.length) てことかな?

965 :デフォルトの名無しさん:2014/12/11(木) 00:52:21.31 ID:45mXFYqI.net
(Array.new(2, 0) + v).take(v.length) の間違い

他にも
Array.new(2, 0) + v[0...-2]
v.rotate(-2).fill(0, 0, 2)
とか書けるね

966 :デフォルトの名無しさん:2014/12/11(木) 23:39:59.15 ID:j2eKWXxC.net
>>963
rotate 知らなかった
調べたら他にも知らないのがあった reverse choice

967 :デフォルトの名無しさん:2014/12/12(金) 11:22:11.81 ID:wvqGZ6uF.net
ファイルの末尾の行を削除するのに以下のようにしているのですが
もっと綺麗な書き方ってありますでしょうか?

tmp = File.open("foo","r").read.sub(/\n.*\z/, "")
File.open("foo", "w"){|f| f << tmp}

968 :デフォルトの名無しさん:2014/12/12(金) 11:47:33.50 ID:r3Fvlg1D.net
メモリ馬鹿喰い

969 :デフォルトの名無しさん:2014/12/12(金) 12:02:57.32 ID:CU7D9V/b.net
Array.write(Array.read("foo")[0..-1])

970 :デフォルトの名無しさん:2014/12/12(金) 15:12:49.30 ID:JZfpq2Ndq
chomp

971 :デフォルトの名無しさん:2014/12/12(金) 19:34:47.77 ID:1pIHSp7p.net
>>969
何これ?
今使っているの1.9.3だけど最新バージョンだとこんなのできるの?

972 :デフォルトの名無しさん:2014/12/12(金) 21:12:49.28 ID:acGnDnrN.net
2.0.0でも2.1.5でもできないぞ

973 :デフォルトの名無しさん:2014/12/12(金) 21:13:06.40 ID:8AuYnR02.net
>>946
> Rubyのしくみ -Ruby Under a Microscope-
> http://www.amazon.co.jp/dp/4274050653/

Amazon売り切れなので、PDFで買ってみた。 500円安い。
http://estore.ohmsha.co.jp/titles/978427405065P

974 :デフォルトの名無しさん:2014/12/12(金) 23:48:26.96 ID:1pIHSp7p.net
>>967
こんなんはどうぢゃろ?

File.open("foo", "r+"){|f| f.truncate(f.size - f.readlines[-1].bytesize)}

>>972
Thanks
そうかやはり出来ないか・・

975 :デフォルトの名無しさん:2014/12/13(土) 00:25:27.81 ID:kA/WgxRu.net
>>973
読み終わったけど得るもの少ない
敢えて抽象的に説明しようとしてるんだろうけど無理矢理感が半端ない
実装はコラム枠で触れる程度
まぁ中卒高卒プログラマで溢れる現在にはこれぐらいがいいのかね

976 :デフォルトの名無しさん:2014/12/13(土) 00:28:40.88 ID:+p+L+BhL.net
>>973
素晴らしいサービスだけどもうちょっと書籍の種類増やして欲しいな

977 :デフォルトの名無しさん:2014/12/13(土) 00:36:48.47 ID:Iq5cIN4q.net
オーム社のPDF本何冊か買ってるけど、やっぱリフロー可能なepubの方がいいなあ
アスキーとかはそうなってる

978 :デフォルトの名無しさん:2014/12/13(土) 08:43:45.27 ID:3ehKG0WS.net
最近よく見かける質問だが、
配列Aに名前、Bに年令、Cに電話番号が入っている時、
B年令順にソートしたとき、
A,Cも同じように入れ替わるのは、どう作ればよい?
ただし、DBを使わず

クラスを作って、名前・年令・電話番号フィールドを作り、
年令でクラスごと、ソートするのか?

クラスに、Comparatorインターフェースを追加して、
比較関数 <=> を定義すればよいのか?


また、sortは比較する時に、同じ関数を何度も呼んで非効率だから、
sort_byを使えばよいのか?

sort_byなら、関数を呼んだ結果を保存して、
その結果を使って比較するから

979 :デフォルトの名無しさん:2014/12/13(土) 08:54:48.07 ID:1EyzOdES.net
>>978
Hashの配列で .sort_by{| hash | hash[:age] } するとか
サクッとデータ構造定義するにしてもclassでやらずにStruct使うとか

ちょっとしたことでクラス定義しちゃうのも、ある意味
クラスの扱いが手軽なRubyらしくていいかな、とも思うけどね

980 :デフォルトの名無しさん:2014/12/13(土) 09:08:10.50 ID:Iq5cIN4q.net
そう言う時はクラス作るだろ。
Cなら構造体で。

最初からなんでもコンテナが用意されているのに慣れていると、こういうバカみたいな
質問する奴でてくるのかな?

981 :デフォルトの名無しさん:2014/12/13(土) 09:09:57.14 ID:3ehKG0WS.net
集合演算を配列A=[1,2],B=[2,3]に使う際、
A + B → 1,2,2,3 重複あり
A | B → 1,2,3 重複なしとなるが、

順列ではなく組合せで、配列が同じかどうかを判別したい
[1,2,2][2,1,2][2,2,1] → 1,2,2
左のどの順列も、[1,2,2]と同じ

Rubyで、組合せマッチはどうすればよい?

982 :デフォルトの名無しさん:2014/12/13(土) 09:11:24.05 ID:KEKavmkB.net
質問重ねる前に礼ぐらい書きなさいよ

983 :デフォルトの名無しさん:2014/12/13(土) 09:11:32.36 ID:1Rys2+MB.net
>>981
Set

984 :975:2014/12/13(土) 09:19:06.92 ID:3ehKG0WS.net
>>979
Hashの配列とはどういう意味?
難しくてよくわからない

A名前は同姓同名もありで、このレコードはキーなしで、
幾つかのフィールドを持つ、単なる構造体と考えてください

985 :デフォルトの名無しさん:2014/12/13(土) 09:22:41.20 ID:uQ37H43s.net
sorted_index=(0..B.size).sort_by{|i|B[i]}

sorted_index.each{|i|
p [A[i],B[i],C[i]]
}

986 :デフォルトの名無しさん:2014/12/13(土) 09:23:28.89 ID:uQ37H43s.net
あ、ミス
×:sorted_index=(0..B.size).sort_by{|i|B[i]}
○:sorted_index=(0..B.size-1).sort_by{|i|B[i]}

987 :975:2014/12/13(土) 09:23:30.88 ID:3ehKG0WS.net
うんうん、皆様、回答ありがとう

988 :デフォルトの名無しさん:2014/12/13(土) 09:26:51.09 ID:1Rys2+MB.net
>>984
最近の言語では列ごとに縦の配列を作るなんてFortranや昔のCみたいな前時代的な発想はしない
確かにメモリの利用効率やアクセス効率の面でメリットはあるが、
Rubyの配列はもともとクソ非効率だから意味は無い
レコードごとにハッシュ作るような昔の人が見たら卒倒するようなことすら平気で行われる

989 :デフォルトの名無しさん:2014/12/13(土) 09:27:56.22 ID:uQ37H43s.net
>>981
処理負荷気にしなくていい程度なら全要素ソートしてから比較できればいい
A.map(&:sort) | B.map(&:sort) とか

990 :デフォルトの名無しさん:2014/12/13(土) 09:30:00.76 ID:DLY4IovQ.net
Ruby 初心者スレッド Part 56©2ch.net
http://peace.2ch.net/test/read.cgi/tech/1418430552/

991 :975:2014/12/13(土) 09:36:37.22 ID:3ehKG0WS.net
>>985-986
配列A,B,C自体は、並べ替えずそのままで、
ソート結果のインデックスのみを使うんだね

もし配列A,B,C自体を並べ替えるのなら、
クラスやStructを使えばよいの?

>>983
Setですか、調べてみます

皆様、回答ありがとう

992 :デフォルトの名無しさん:2014/12/13(土) 09:52:04.58 ID:uQ37H43s.net
正しくは、というかちゃんとするならクラスやStructだろうね
その場で並び替えたいだけならいくらでもやりようはあるよ
A,B,C=[A,B,C].map{|a|sorted_index.map{|i|a[i]}}
とか

993 :デフォルトの名無しさん:2014/12/13(土) 09:54:01.10 ID:uQ37H43s.net
B,A,C=B.zip(A,C).sort.transpose
とか

994 :975:2014/12/13(土) 09:54:01.70 ID:3ehKG0WS.net
>>983
>>981
は同じ要素ありだから、集合を使えない

Set,SortedSetは集合だから、同じ要素は持てない

995 :デフォルトの名無しさん:2014/12/13(土) 09:57:09.43 ID:1Rys2+MB.net
>>994
だったらソートしてから比較しろ

996 :975:2014/12/13(土) 10:06:02.73 ID:3ehKG0WS.net
map,zipなど、魔法のような関数が、次々と出てきますね

Rでも行列を入れ替える関数などに、驚いたものですが、
もはや、Rubyは神です!
Rubyの奥深さを、少し知ることが出来ますた

997 :デフォルトの名無しさん:2014/12/13(土) 10:07:58.45 ID:1Rys2+MB.net
土方言語のVBやC#やJavaでもできるけどね

998 :デフォルトの名無しさん:2014/12/13(土) 10:14:06.14 ID:DLY4IovQ.net
関数とかインタフェースとか言ってる時点でお察し

999 :デフォルトの名無しさん:2015/01/10(土) 20:35:41.59 ID:DDEEiBhUK
netが落ちてる内に埋め

1000 :デフォルトの名無しさん:2015/01/10(土) 20:36:49.88 ID:DDEEiBhUK
あ、質問あるの忘れてた
例外処理について詳しく教えてくれますか

1001 :デフォルトの名無しさん:2015/01/10(土) 20:49:02.07 ID:DDEEiBhUK
jimは消えた方がいいんじゃないの

総レス数 1001
294 KB
掲示板に戻る 全部 前100 次100 最新50
read.cgi ver 2014.07.20.01.SC 2014/07/20 D ★