From: EGUCHI Osamu Date: 1999-10-12T13:00:39+09:00 Subject: [ruby-dev:7985] [patch] Array#delete_at w/ minus value えぐち@エスアンドイーです。 負のインデックスを Array の delete_at の引数に 使えるようにしてみました。 a = [1, 2, 3] a.delete_at(-2) p a => [1, 3] 考えた範囲で、害は無いと思うのですが、どうでしょうか? えぐち Index: array.c =================================================================== RCS file: /usr/home/eguchi/cvs.netlab.co.jp//ruby/array.c,v retrieving revision 1.2 diff -d -u -r1.2 array.c --- array.c 1999/08/13 05:45:02 1.2 +++ array.c 1999/10/12 03:28:03 @@ -940,22 +940,19 @@ VALUE ary; VALUE at; { - long i1, i2, pos; + long i, pos = NUM2LONG(at), len = RARRAY(ary)->len; VALUE del = Qnil; + if (pos >= len) return Qnil; + if (pos < 0) pos += len; + if (pos < 0) return Qnil; + rb_ary_modify(ary); - pos = NUM2LONG(at); - for (i1 = i2 = 0; i1 < RARRAY(ary)->len; i1++) { - if (i1 == pos) { - del = RARRAY(ary)->ptr[i1]; - continue; - } - if (i1 != i2) { - RARRAY(ary)->ptr[i2] = RARRAY(ary)->ptr[i1]; - } - i2++; + del = RARRAY(ary)->ptr[pos]; + for (i = pos + 1; i < len; i++, pos++) { + RARRAY(ary)->ptr[pos] = RARRAY(ary)->ptr[i]; } - RARRAY(ary)->len = i2; + RARRAY(ary)->len = pos; return del; }