[#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>
なかだです。
なかだです。
金光です。
むらけんです.
金光です。
金光です。
金光です。
金光です。どもっ。
むらけんです.
なかだです。
金光です。どもっ。
金光です。
金光です。FOXとかもあるのかぁ。すげぇなぁ。
まつもと ゆきひろです
金光です。御大、待ってましたっ。
なかだです。
金光です。どもどもっ。
なかだです。
さくです。
まつもと ゆきひろです
金光です。どもっ。
まつもと ゆきひろです
金光です。どもどもっ。
まつもと ゆきひろです
岩月と申します。
金光です。どもっ。
岩月と申します。
むらけんです.
楠です
むらけんです.
有馬です。
金光です。
有馬です。
金光です。どもっ。
とみたです。
金光です。
とみたです。
金光です。
まつもと ゆきひろです
金光です。(^_^;
あづみです。
有馬です。
金光です。
有馬です。
金光です。どもっ。
有馬です。
むらけんです.
むらけんさん wrote:
むらけんです.
長沢です。
まつもと ゆきひろです
金光です。どもっ。
有馬です。
金光です。どもどもっ。
むらけんです.
金光です。いちおうフォローだけ
ふなばです。
一応フォローだけ、ほんとにちょっとだけっすよ
[#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@...>
なひです。
In article <DJEGJLCFNEIMKDNMLFPHCEPJCAAA.nakahiro@sarion.co.jp>,
なひです。
まつもと ゆきひろです
In article <DJEGJLCFNEIMKDNMLFPHCEPJCAAA.nakahiro@sarion.co.jp>,
あおきです。
In article <20010809221751J.aamine@mx.edit.ne.jp>,
なひです。書き忘れ。
なかだです。
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>,
なかだです。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
なかだです。
まつもと ゆきひろです
あづみです。
[#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:
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("<=>");