[#14185] ruby on Linux/m68k — akira yamada / やまだあきら <akira@...>
[#14196] fork() on MacOS — nobu.nakada@...
なかだです。
[#14206] undef_method :method_missing — Kenichi Komiya <kom@...1.accsnet.ne.jp>
なかだです。
なかだです。
金光です。
むらけんです.
金光です。
楠です
金光です。
金光です。
金光です。どもっ。
なかだです。
金光です。どもっ。
金光です。
岩月と申します。
金光です。どもっ。
有馬です。
金光です。
有馬です。
金光です。どもっ。
とみたです。
金光です。
とみたです。
金光です。
まつもと ゆきひろです
金光です。(^_^;
あづみです。
有馬です。
金光です。
有馬です。
金光です。どもっ。
有馬です。
むらけんです.
むらけんさん wrote:
むらけんです.
長沢です。
まつもと ゆきひろです
金光です。どもっ。
有馬です。
金光です。どもどもっ。
むらけんです.
金光です。いちおうフォローだけ
ふなばです。
一応フォローだけ、ほんとにちょっとだけっすよ
岩月と申します。
むらけんです.
楠です
むらけんです.
金光です。FOXとかもあるのかぁ。すげぇなぁ。
まつもと ゆきひろです
金光です。御大、待ってましたっ。
なかだです。
金光です。どもどもっ。
なかだです。
さくです。
まつもと ゆきひろです
金光です。どもっ。
まつもと ゆきひろです
金光です。どもどもっ。
[#14229] [BUG] segv on [str].pack("p") — Koji Arai <JCA02266@...>
新井です。
なかだです。
新井です。
なかだです。
[#14338] setup.rb (Re: Common GUI framework) — Minero Aoki <aamine@...>
あおきです。
[#14382] [BUG] segv on regex matching with long string — TAKAHASHI Masayoshi <maki@...>
高橋征義です。
[#14390] [Patch] pp.rb and debug.rb — "NAKAMURA, Hiroshi" <nakahiro@...>
なひです。
なひです。書き忘れ。
なかだです。
nobu.nakada@nifty.ne.jpさんの
なひです。
なかだです。
In article <DJEGJLCFNEIMKDNMLFPHMEAHCBAA.nakahiro@sarion.co.jp>,
なひです。
In article <DJEGJLCFNEIMKDNMLFPHEEAICBAA.nakahiro@sarion.co.jp>,
なひです。
まつもと ゆきひろです
In article <997774251.527258.14423.nullmailer@ev.netlab.jp>,
まつもと ゆきひろです
In article <997783083.657819.14685.nullmailer@ev.netlab.jp>,
なひです。
In article <DJEGJLCFNEIMKDNMLFPHEEALCBAA.nakahiro@sarion.co.jp>,
なひです。
In article <DJEGJLCFNEIMKDNMLFPHEEAPCBAA.nakahiro@sarion.co.jp>,
なひです。
In article <DJEGJLCFNEIMKDNMLFPHMEBACBAA.nakahiro@sarion.co.jp>,
あづみです。
なひです。
In article <DJEGJLCFNEIMKDNMLFPHIEBBCBAA.nakahiro@sarion.co.jp>,
うぅむ。ぼーっとしてたら意味もなく Subject を変えてしまった。
In article <20010817205051.UAZHC0A8274C.C78F0C8A@mail.biglobe.ne.jp>,
あづみです。
In article <hvo66bnxe4b.fsf_-_@flux.etl.go.jp>,
古い話題で恐縮ですが…
なかだです。
In article <200109290948.f8T9mbh12942@sharui.nakada.kanuma.tochigi.jp>,
なかだです。
まつもと ゆきひろです
In article <1001945748.240863.24023.nullmailer@ev.netlab.jp>,
なかだです。
In article <200110020334.f923YLb08299@sharui.nakada.kanuma.tochigi.jp>,
なかだです。
In article <200110021010.f92AAIb13474@sharui.nakada.kanuma.tochigi.jp>,
なかだです。
まつもと ゆきひろです
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
In article <1002080461.740444.11187.nullmailer@ev.netlab.jp>,
In article <DJEGJLCFNEIMKDNMLFPHCEPJCAAA.nakahiro@sarion.co.jp>,
なひです。
まつもと ゆきひろです
In article <DJEGJLCFNEIMKDNMLFPHCEPJCAAA.nakahiro@sarion.co.jp>,
あおきです。
In article <20010809221751J.aamine@mx.edit.ne.jp>,
[#14406] typo in ruby 1.7 — Koji Arai <JCA02266@...>
新井です。
[#14413] 1.7.1 2001-08-06: if true && /match/ — WATANABE Tetsuya <tetsu@...>
渡辺哲也です。
[#14465] Ruby/Bsearch — akira yamada / やまだあきら <akira@...>
まつもと ゆきひろです
At Wed, 15 Aug 2001 18:01:50 +0900,
"Akinori MUSHA" <knu@iDaemons.org> wrote:
At Thu, 16 Aug 2001 00:15:05 +0900,
In article <20010816001456V.satoru@namazu.org>,
Tanaka Akira <akr@m17n.org> wrote:
In article <20010816130056C.satoru@namazu.org>,
[#14480] avoid compile warning of tcltklib with VC5 — "U.Nakamura" <usa@...>
こんにちは、なかむら(う)です。
なかだです。
こんにちは、なかむら(う)です。
[#14505] BUG: ruby 1.6.4 cannot use threads on Sparc (segv) — akira yamada / やまだあきら <akira@...>
[#14530] restore terminal mode even if readline interrupted. — Koji Arai <JCA02266@...>
新井です。
新井です。
新井です。
新井です。
At Wed, 5 Sep 2001 00:19:51 +0900,
まつもと ゆきひろです
[#14552] read in IO#eof? — nobu.nakada@...
なかだです。
[#14575] infinite loop on Dir.glob("*/**/*") — nobu.nakada@...
なかだです。
[#14577] option nodynamic — Daisuke Aoki <dai@...>
青木@横浜です。
[#14595] SEGV at `$0 = "long long string"' — nobu.nakada@...
なかだです。
なかだです。
まつもと ゆきひろです
[ruby-dev:14584] Array#merge, Array#squeeze
最近 Ruby の中身に関わる時間が取れないのですが、書いている
プログラムで欲しくなったメソッドがあるので、実装してみました。
Array#merge(obj1[, obj2, ...])
与えられたオブジェクトのうち、配列に含まれない要素を
追加する。重複する要素は一つだけになる。
a.merge(*x) と a.replace(a | x) はほぼ等価である。
(|= を破壊的に行う)
Array#squeeze([obj, ...])
Array#squeeze!([obj, ...])
同じ要素の連続を一つに圧縮する。引数が指定された場合は
引数に含まれるもののみを対象に圧縮する。
String#squeeze の配列版。
実装において、 ary_make_hash() の argc, argv 対応版が必要だった
ので ary_make_hash2() として用意し、 ary_make_hash() の下請けと
しました。
ほかにもいいと思う人が多ければ 1.7 に入れたいなあと思いますが、
いかがでしょうか?名前や実装についても突っ込みがあればよろしく。
# union(!), unify(!) なども考えたが、ある程度対等な関係であれば
# | を使う方が見た目もよいので、ニュアンスからも merge が適当と
# 判断した。
--
/
/__ __ Akinori.org / MUSHA.org
/ ) ) ) ) / FreeBSD.org / Ruby-lang.org
Akinori MUSHA aka / (_ / ( (__( @ iDaemons.org / and.or.jp
"Freeze this moment a little bit longer, make each impression
a little bit stronger.. Experience slips away -- Time stand still"
Index: array.c
===================================================================
RCS file: /src/ruby/array.c,v
retrieving revision 1.56
diff -u -r1.56 array.c
--- array.c 2001/08/23 06:02:14 1.56
+++ array.c 2001/08/27 08:40:12
@@ -1485,24 +1485,36 @@
}
static VALUE
-ary_make_hash(ary1, ary2)
- VALUE ary1, ary2;
+ary_make_hash2(ary, argc2, argv2)
+ VALUE ary;
+ int argc2;
+ VALUE *argv2;
{
VALUE hash = rb_hash_new();
+ int argc1 = RARRAY(ary)->len;
+ VALUE *argv1 = RARRAY(ary)->ptr;
int i;
- for (i=0; i<RARRAY(ary1)->len; i++) {
- rb_hash_aset(hash, RARRAY(ary1)->ptr[i], Qtrue);
+ for (i = 0; i < argc1; i++) {
+ rb_hash_aset(hash, argv1[i], Qtrue);
}
- if (ary2) {
- for (i=0; i<RARRAY(ary2)->len; i++) {
- rb_hash_aset(hash, RARRAY(ary2)->ptr[i], Qtrue);
- }
+ for (i = 0; i < argc2; i++) {
+ rb_hash_aset(hash, argv2[i], Qtrue);
}
return hash;
}
static VALUE
+ary_make_hash(ary1, ary2)
+ VALUE ary1, ary2;
+{
+ if (ary2)
+ return ary_make_hash2(ary1, RARRAY(ary2)->len, RARRAY(ary2)->ptr);
+ else
+ return ary_make_hash2(ary1, 0, 0);
+}
+
+static VALUE
rb_ary_and(ary1, ary2)
VALUE ary1, ary2;
{
@@ -1552,6 +1564,44 @@
}
static VALUE
+rb_ary_merge(argc, argv, ary)
+ int argc;
+ VALUE *argv;
+ VALUE ary;
+{
+ VALUE hash = ary_make_hash2(ary, argc, argv);
+ VALUE *p;
+ long i, j, len;
+
+ rb_ary_modify(ary);
+
+ p = RARRAY(ary)->ptr;
+ len = RARRAY(ary)->len;
+
+ for (i = j = 0; j < len; j++) {
+ VALUE v = p[j];
+ if (st_delete(RHASH(hash)->tbl, &v, 0)) {
+ p[i++] = p[j];
+ }
+ }
+
+ RARRAY(ary)->len = RARRAY(ary)->capa =
+ len = i + RHASH(hash)->tbl->num_entries;
+ REALLOC_N(RARRAY(ary)->ptr, VALUE, len);
+
+ p = RARRAY(ary)->ptr;
+
+ for (j = 0; j < argc; j++) {
+ VALUE v = argv[j];
+ if (st_delete(RHASH(hash)->tbl, &v, 0)) {
+ p[i++] = argv[j];
+ }
+ }
+
+ return ary;
+}
+
+static VALUE
rb_ary_uniq_bang(ary)
VALUE ary;
{
@@ -1618,6 +1668,73 @@
}
static VALUE
+rb_ary_squeeze_bang(argc, argv, ary)
+ int argc;
+ VALUE *argv;
+ VALUE ary;
+{
+ int included;
+ long i, j, k, len;
+ VALUE *ptr, prev;
+
+ len = RARRAY(ary)->len;
+
+ if (len <= 1) return ary;
+
+ rb_ary_modify(ary);
+ ptr = RARRAY(ary)->ptr;
+
+ for (i = j = 0; ;) {
+ prev = ptr[j];
+
+ i++, j++;
+
+ if (len <= j) goto done;
+
+ if (argc > 0) {
+ included = 0;
+
+ for (k = 0; k < argc; k++) {
+ if (rb_equal(argv[k], ptr[j])) {
+ included = 1;
+ break;
+ }
+ }
+ }
+ else {
+ included = 1;
+ }
+
+ if (included) {
+ while (rb_equal(prev, ptr[j])) {
+ j++;
+
+ if (len <= j) goto done;
+ }
+ }
+
+ if (i != j) ptr[i] = ptr[j];
+ }
+
+ done:
+ RARRAY(ary)->len = RARRAY(ary)->capa = i;
+ REALLOC_N(RARRAY(ary)->ptr, VALUE, i);
+
+ return ary;
+}
+
+static VALUE
+rb_ary_squeeze(argc, argv, ary)
+ int argc;
+ VALUE *argv;
+ VALUE ary;
+{
+ ary = rb_ary_dup(ary);
+ rb_ary_squeeze_bang(argc, argv, ary);
+ return ary;
+}
+
+static VALUE
rb_ary_nitems(ary)
VALUE ary;
{
@@ -1773,12 +1890,15 @@
rb_define_method(rb_cArray, "&", rb_ary_and, 1);
rb_define_method(rb_cArray, "|", rb_ary_or, 1);
+ rb_define_method(rb_cArray, "merge", rb_ary_merge, -1);
rb_define_method(rb_cArray, "uniq", rb_ary_uniq, 0);
rb_define_method(rb_cArray, "uniq!", rb_ary_uniq_bang, 0);
rb_define_method(rb_cArray, "compact", rb_ary_compact, 0);
rb_define_method(rb_cArray, "compact!", rb_ary_compact_bang, 0);
rb_define_method(rb_cArray, "flatten", rb_ary_flatten, 0);
rb_define_method(rb_cArray, "flatten!", rb_ary_flatten_bang, 0);
+ rb_define_method(rb_cArray, "squeeze", rb_ary_squeeze, -1);
+ rb_define_method(rb_cArray, "squeeze!", rb_ary_squeeze_bang, -1);
rb_define_method(rb_cArray, "nitems", rb_ary_nitems, 0);
cmp = rb_intern("<=>");