[#42508] [Ruby 1.9-Bug#4013][Open] rake/test_tasks.rb fails if ENV assined test value — Akio Tajima <redmine@...>
Bug #4013: rake/test_tasks.rb fails if ENV assined test value
7 messages
2010/11/01
[#42520] GC issues — SASADA Koichi <ko1@...>
ささだです。
6 messages
2010/11/03
[#42551] [Ruby 1.9-Bug#4034][Open] format() の %a 指定子での丸めが常に零方向になっている — tadayoshi funaba <redmine@...>
Bug #4034: format() の %a 指定子での丸めが常に零方向になっている
5 messages
2010/11/07
[#42564] [Ruby 1.9-Feature#4043][Open] グローバル関数current_classの提案 — Makoto Kishimoto <redmine@...>
Feature #4043: =E3=82=B0=E3=83=AD=E3=83=BC=E3=83=90=E3=83=AB=E9=96=A2=E6=95=
15 messages
2010/11/11
[#42774] Re: [Ruby 1.9-Feature#4043][Open] グローバル関数current_classの提案
— Yukihiro Matsumoto <matz@...>
2010/12/16
まつもと ゆきひろです
[#42834] Re: [Ruby 1.9-Feature#4043][Open] グローバル関数current_classの提案
— "KISHIMOTO, Makoto" <ksmakoto@...4u.or.jp>
2010/12/21
きしもとです
[#42835] Re: [Ruby 1.9-Feature#4043][Open] グローバル関数current_classの提案
— Yukihiro Matsumoto <matz@...>
2010/12/21
まつもと ゆきひろです
[#42838] Re: [Ruby 1.9-Feature#4043][Open] グローバル関数current_classの提案
— "KISHIMOTO, Makoto" <ksmakoto@...4u.or.jp>
2010/12/21
きしもとです
[#42845] Re: [Ruby 1.9-Feature#4043][Open] グローバル関数current_classの提案
— Yukihiro Matsumoto <matz@...>
2010/12/21
まつもと ゆきひろです
[#42849] Re: [Ruby 1.9-Feature#4043][Open] グローバル関数current_classの提案
— "U.Nakamura" <usa@...>
2010/12/22
こんにちは、なかむら(う)です。
[#42577] Rubyのバグレポートのガイドライン — "Shota Fukumori (sora_h)" <sorah@...>
sora_hです。
11 messages
2010/11/15
[#42588] Re: Rubyのバグレポートのガイドライン
— Yugui <yugui@...>
2010/11/18
2010/11/15 Shota Fukumori (sora_h) <sorah@tubusu.net>:
[#42589] Re: Rubyのバグレポートのガイドライン
— "Shota Fukumori (sora_h)" <sorah@...>
2010/11/18
元を書いてくれたmame3の様子をみてドラフトを外してみようかと思います。
[#42601] [Ruby 1.9-Bug#4072][Open] dRubyで作成したサーバプログラムがsleepしていてもexitしてしまう — 三村 益隆 <redmine@...>
Bug #4072: dRubyで作成したサーバプログラムがsleepしていてもexitしてしまう
7 messages
2010/11/19
[#42625] [Ruby 1.9-Feature#4089][Open] Add addr2line for C level backtrace — Yui NARUSE <redmine@...>
Feature #4089: Add addr2line for C level backtrace
6 messages
2010/11/26
[#42638] Enumerable#categorize — Tanaka Akira <akr@...>
enumerable から hash を生成するメソッドとして
25 messages
2010/11/27
[#42639] Re: Enumerable#categorize
— Urabe Shyouhei <shyouhei@...>
2010/11/27
(2010/11/27 18:45), Tanaka Akira wrote:
[#42643] Re: Enumerable#categorize
— Yukihiro Matsumoto <matz@...>
2010/11/27
まつもと ゆきひろです
[#42644] Re: Enumerable#categorize
— Tanaka Akira <akr@...>
2010/11/27
2010年11月27日23:19 Yukihiro Matsumoto <matz@ruby-lang.org>:
[#42645] Re: Enumerable#categorize
— Yukihiro Matsumoto <matz@...>
2010/11/27
まつもと ゆきひろです
[#42646] Re: Enumerable#categorize
— Tanaka Akira <akr@...>
2010/11/27
2010年11月27日23:51 Yukihiro Matsumoto <matz@ruby-lang.org>:
[#42656] [Request for Comment] avoid timer thread — SASADA Koichi <ko1@...>
Hi,
1 message
2010/11/29
[ruby-dev:42639] Re: Enumerable#categorize
From:
Urabe Shyouhei <shyouhei@...>
Date:
2010-11-27 10:37:21 UTC
List:
ruby-dev #42639
(2010/11/27 18:45), Tanaka Akira wrote:
> こういうデータから、各要素の第一要素から第二要素、
> あるいは第二要素から第一要素へのハッシュを作るというのはありがちな話です。
ニーズは理解できます。
> 幸いにして第一要素から第二要素へのハッシュは Hash[ary] で作れるようになったので、
> 逆の第二要素から第一要素へのハッシュについて考えましょう。
> (同姓同名を考慮して、ハッシュの値は第一要素の配列としましょう)
>
> これを得るには現在、残念な事に、自分でループを書く必要があります。
この状況を改善するという選択肢はありませんか。つまりHash[ary].invertがもう少し
賢くなればいいんですよね?
> 引数の 1, 0 が何を意味するかというと、enumerable の要素から
> ハッシュのキー及び値を取り出す指定です。
> 具体的には ary の各要素に対し、[] メソッドを呼び出し、
> その引数に引き渡してキー/値を得ます。
> つまり、["matz", "Yukihiro Matsumoto"][1] として "Yukihiro Matsumoto" というキーを得て、
> ["matz", "Yukihiro Matsumoto"][0] として "matz" という値を得るわけです。
分かりにくすぎると思います。
> どうでしょうか。
これが存在すること自体には特に反対しませんが、ちょっと抽象的すぎて逆に使いづら
いと感じます。最終的にこのアルゴリズムに落ちたとしても、ユーザーにはもう少し使
いやすいAPIを提供すべきでしょう。たとえば数を数える専用のメソッドを作るとか。
Index: hash.c
===================================================================
--- hash.c (revision 29883)
+++ hash.c (working copy)
@@ -1706,6 +1706,17 @@
return ST_CONTINUE;
}
+static int
+rb_hash_invert_with_block_i(VALUE key, VALUE value, VALUE hash)
+{
+ if (key == Qundef) return ST_CONTINUE;
+ if (rb_hash_has_key(hash, value)) {
+ key = rb_yield_values(3, value, rb_hash_aref(hash, value), key);
+ }
+ rb_hash_aset(hash, value, key);
+ return ST_CONTINUE;
+}
+
/*
* call-seq:
* hsh.invert -> new_hash
@@ -1716,6 +1727,11 @@
* h = { "n" => 100, "m" => 100, "y" => 300, "d" => 200, "a" => 0 }
* h.invert #=> {0=>"a", 100=>"m", 200=>"d", 300=>"y"}
*
+ * Without a block given, entries with identical values are
+ * clobbered. No guarantee on which one shall be chosen. With a
+ * block on the other hand, you can choose which (or both). See
+ * Hash#update for how.
+ *
*/
static VALUE
@@ -1723,7 +1739,12 @@
{
VALUE h = rb_hash_new();
- rb_hash_foreach(hash, rb_hash_invert_i, h);
+ if (rb_block_given_p()) {
+ rb_hash_foreach(hash, rb_hash_invert_with_block_i, h);
+ }
+ else {
+ rb_hash_foreach(hash, rb_hash_invert_i, h);
+ }
return h;
}