[#42672] [Ruby 1.9-Bug#4110][Open] ホスト名の先頭が数字であるとき、WEBrickのテストでErrorが出る — Kouhei Yanagita <redmine@...>
Bug #4110: =E3=83=9B=E3=82=B9=E3=83=88=E5=90=8D=E3=81=AE=E5=85=88=E9=A0=AD=
[#42684] [Ruby 1.9-Bug#4120][Assigned] 2 failures on test/mkmf/test_convertible.rb — Usaku NAKAMURA <redmine@...>
Bug #4120: 2 failures on test/mkmf/test_convertible.rb
なかだです。
こんにちは、なかむら(う)です。
[#42692] [Feature: trunk] String#encode(:fallback) should accept default handler — SASADA Koichi <ko1@...>
ささだです.
[#42701] 1.9.x release and trunk branch policy — Yusuke ENDOH <mame@...>
まつもとさん、Yugui さん
[#42730] [Ruby 1.9-Bug#4143][Open] warning: "SUPPORT_JOKE" is not defined — Kazuhiro NISHIYAMA <redmine@...>
Bug #4143: warning: "SUPPORT_JOKE" is not defined
チケット #4143 が更新されました。 (by Kazuhiro NISHIYAMA)
2010年12月10日22:38 Kazuhiro NISHIYAMA <redmine@ruby-lang.org>:
(2010/12/10 23:49), KOSAKI Motohiro wrote:
[#42735] [Ruby 1.9-Feature#4147][Open] Array#sample で重みを指定したい — Yoji Ojima <redmine@...>
Feature #4147: Array#sample で重みを指定したい
チケット #4147 が更新されました。 (by Shyouhei Urabe)
> じゃあ反対ないので実装はともかく、この仕様は基本入れる方向で考えましょう。反対の人は意思表示お早めに。
Yuguiです。
2010年12月19日21:15 Yugui <yugui@yugui.jp>:
チケット #4147 が更新されました。 (by Yoji Ojima)
遠藤です。
チケット #4147 が更新されました。 (by Yoji Ojima)
[#42758] [Ruby 1.9-Bug#4157][Open] test_pty で、たまに出る Failure — Makoto Kishimoto <redmine@...>
Bug #4157: test_pty で、たまに出る Failure
[#42763] [Ruby 1.9-Bug#4159][Open] test_block_variables(TestRipper::ParserEvents) が失敗する — Kouhei Yanagita <redmine@...>
Bug #4159: test_block_variables(TestRipper::ParserEvents) が失敗する
[#42778] BasicObject#object_id — keiju@... (Keiju ISHITSUKA)
けいじゅ@いしつかです.
[#42782] [Ruby 1.9-Feature#4165][Open] win32ビルドでbaserubyを設定しなかったときのエラーが非常に不親切 — Motohiro KOSAKI <redmine@...>
Feature #4165: win32=E3=83=93=E3=83=AB=E3=83=89=E3=81=A7baseruby=E3=82=92=
[#42832] [Ruby 1.9-Bug#4178][Open] test/rubygems/gemutilities.rb で、よくわからない ArgumentError — Makoto Kishimoto <redmine@...>
Bug #4178: test/rubygems/gemutilities.rb で、よくわからない ArgumentError
[#42869] [feature:trunk] option for Socket#sendmsg — Nobuyoshi Nakada <nobu@...>
なかだです。
2010年12月23日21:01 Nobuyoshi Nakada <nobu@ruby-lang.org>:
[#42887] [Ruby 1.9-Feature#4204][Open] IO#advise should raise error for unknown symbol — Tomoyuki Chikanaga <redmine@...>
Feature #4204: IO#advise should raise error for unknown symbol
[#42893] [Ruby 1.8-Bug#4206][Open] failed to set ext option for win32/configure.bat — Akio Tajima <redmine@...>
Bug #4206: failed to set ext option for win32/configure.bat
[#42894] [Ruby 1.8-Feature#4207][Open] これから「1.8.8」の話をしよう -- 1.8がこの先生きのこるには — Shyouhei Urabe <redmine@...>
Feature #4207: これから「1.8.8」の話をしよう -- 1.8がこの先生きのこるには
むらたです。
むらたです。
2011/1/5 Kenta Murata <muraken@gmail.com>:
こんにちは、なかむら(う)です。
チケット #4207 が更新されました。 (by Shyouhei Urabe)
チケット #4207 が更新されました。 (by Akinori MUSHA)
[ruby-dev:42691] Re: Enumerable#categorize
遠藤です。
2010年11月27日18:45 Tanaka Akira <akr@fsij.org>:
> enumerable から hash を生成するメソッドとして
> Enumerable#categorize を追加するのはどうでしょうか。
みんなと同じ感想ですが、やはり 1 メソッドに詰め込み過ぎていると思います。
「要素の抽出」「分類集計処理」「後処理」のうち、2 番目に絞ったらいいのでは
ないでしょうか。
[[1, 2], [1, 3], [2, 3]].aggregate #=> {1 => [2, 3], 2 => [3]}
[[1, 2], [1, 3], [2, 3]].aggregate(:op=>:+) #=> {1 => 5, 2 => 3 }
[[1, 2, 3]].aggregate #=> {1 => {2 => [3]} }
# 議論の混乱防止のため、aggregate という名前にしています。
# 他の候補としては、to_hash 、hashtree とかどうでしょう。
コーナーケースはこんな感じでしょうか。
[[1, 2], [1, 2, 3]].aggregate #=> 例外
[].aggregate #=> {}
[[]].aggregate #=> 例外
[[1]].aggregate #=> 例外
多少 categorize より長くなりますが、何をやっているかはずっとわかりやすく
なると思います。
以下、akr さんの例を書き換えてみました。
ary = [["matz", "Yukihiro Matsumoto"],
["nobu", "Nobuyoshi Nakada"],
["akr", "Tanaka Akira"],
["usa", "Usaku NAKAMURA"],
["naruse", "NARUSE, Yui"],
["ko1", "SASADA Koichi"]]
# akr さん版:
# h = ary.categorize(1, 0)
h = ary.map {|k, v| [v, k] }.aggregate
#=> {"Yukihiro Matsumoto"=>["matz"],
# "Nobuyoshi Nakada"=>["nobu"],
# "Tanaka Akira"=>["akr"],
# "Usaku NAKAMURA"=>["usa"],
# "NARUSE, Yui"=>["naruse"],
# "SASADA Koichi"=>["ko1"]}
# akr さん版:
# ary.categorize(lambda {|elt| elt[1] }, lambda {|elt| elt[0] })
h = ary.map {|elt| [elt[1], elt[0]] }.aggregate
#=> {"Yukihiro Matsumoto"=>["matz"],
# "Nobuyoshi Nakada"=>["nobu"],
# "Tanaka Akira"=>["akr"],
# "Usaku NAKAMURA"=>["usa"],
# "NARUSE, Yui"=>["naruse"],
# "SASADA Koichi"=>["ko1"]}
# akr さん版:
# h = ary.categorize(lambda {|e| e[0][0] }, lambda {|e| e[0][1]}, 0)
h = ary.map {|e| [e[0][0], e[0][1], e[0]] }.aggregate
#=> {"m"=>{"a"=>["matz"]},
# "n"=>{"o"=>["nobu"], "a"=>["naruse"]},
# "a"=>{"k"=>["akr"]},
# "u"=>{"s"=>["usa"]},
# "k"=>{"o"=>["ko1"]}}
# akr さん版:
# h = ary.categorize(lambda {|e| e[0][0] }, 1) {|ks, vs| vs.sort }
h = ary.map {|elt| [elt[0][0], elt[1]] }.aggregate
h.each {|ks, vs| h[ks] = vs.sort } # または vs.sort!
#=> {"m"=>["Yukihiro Matsumoto"],
# "n"=>["NARUSE, Yui", "Nobuyoshi Nakada"],
# "a"=>["Tanaka Akira"],
# "u"=>["Usaku NAKAMURA"],
# "k"=>["SASADA Koichi"]}
# akr さん版:
# h = ary.categorize(1, 0) {|ks, vs|
# raise "duplicate keys: #{ks.inspcet}" if vs.length != 1
# vs[0]
# }
h = ary.map {|k, v| [v, k] }.aggregate
h.each {|ks, vs|
raise "duplicate keys: #{ks.inspcet}" if vs.length != 1
h[ks] = vs[0]
}
#=> {"Yukihiro Matsumoto"=>"matz",
# "Nobuyoshi Nakada"=>"nobu",
# "Tanaka Akira"=>"akr",
# "Usaku NAKAMURA"=>"usa",
# "NARUSE, Yui"=>"naruse",
# "SASADA Koichi"=>"ko1"}
# akr さん版:
# h = ary.categorize(lambda {|e| e[0][0] }, lambda {|e| 1 }, :op=>:+)
h = ary.map {|e| [e[0][0], 1] }.aggregate(:op=>:+)
#=> {"m"=>1, "n"=>2, "a"=>1, "u"=>1, "k"=>1}
# akr さん版:
# committers = open("ruby-committers.yml") {|f| YAML.load(f) }
# pp committers.categorize("account", ["name", "nick"]) {|ks, vs| vs[0] }
h = committers.map {|e| [e["account"], [e["name"], e["nick"]]] }.aggregate
h.each {|ks, vs| h[ks] = vs[0] }
中間配列ができるのが嫌、と言われると思いますが、それは categorize 特有の
問題ではないので、map の Enumerator を返すバージョンを用意することで解決
すべきだと思います。
# 手前味噌ですが http://d.hatena.ne.jp/ku-ma-me/20091111/p2
また、Hash から Hash を返す map もあると便利かもしれません。
しばしば要望きてると思いますが、なんで用意されないんでしたっけ。
group_by との類似については、個人的にはあまり気になりません。
というか、group_by がどうにも使いにくすぎるのが行けないんだと思います。
あと、:seed は値ではなく値を生成する Proc を受け取るべきだと思います。
Hash.new([]) と同じ設計不良になってしまいます。
p [[1, 2], [1, 3], [2, 5]].categorize(0, 1, seed: [], op: proc {|x,
e| x << e })
{1=>[2, 3, 5], 2=>[2, 3, 5]}
--
Yusuke Endoh <mame@tsg.ne.jp>