[前][次][番号順一覧][スレッド一覧]

ruby-changes:10420

From: matz <ko1@a...>
Date: Mon, 2 Feb 2009 19:43:37 +0900 (JST)
Subject: [ruby-changes:10420] Ruby:r21967 (trunk): * array.c (rb_ary_sort_by_bang): new method. requested in

matz	2009-02-02 19:43:27 +0900 (Mon, 02 Feb 2009)

  New Revision: 21967

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=21967

  Log:
    * array.c (rb_ary_sort_by_bang): new method.  requested in
      [ruby-core:21709]

  Modified files:
    trunk/ChangeLog
    trunk/array.c

Index: array.c
===================================================================
--- array.c	(revision 21966)
+++ array.c	(revision 21967)
@@ -1843,8 +1843,35 @@
 }
 
 
+static VALUE
+sort_by_i(VALUE i)
+{
+    return rb_yield(i);
+}
+
 /*
  *  call-seq:
+ *     enum.sort_by! {| obj | block }    -> array
+ *
+ *  Sorts <i>enum</i> in place using a set of keys generated by mapping the
+ *  values in <i>enum</i> through the given block.
+ */
+
+static VALUE
+rb_ary_sort_by_bang(VALUE ary)
+{
+    VALUE sorted;
+
+    RETURN_ENUMERATOR(ary, 0, 0);
+    rb_ary_modify(ary);
+    sorted = rb_block_call(ary, rb_intern("sort_by"), 0, 0, sort_by_i, 0);
+    rb_ary_replace(ary, sorted);
+    return ary;
+}
+
+
+/*
+ *  call-seq:
  *     array.collect {|item| block }  -> an_array
  *     array.map     {|item| block }  -> an_array
  *  
@@ -3830,6 +3857,7 @@
     rb_define_method(rb_cArray, "reverse!", rb_ary_reverse_bang, 0);
     rb_define_method(rb_cArray, "sort", rb_ary_sort, 0);
     rb_define_method(rb_cArray, "sort!", rb_ary_sort_bang, 0);
+    rb_define_method(rb_cArray, "sort_by!", rb_ary_sort_by_bang, 0);
     rb_define_method(rb_cArray, "collect", rb_ary_collect, 0);
     rb_define_method(rb_cArray, "collect!", rb_ary_collect_bang, 0);
     rb_define_method(rb_cArray, "map", rb_ary_collect, 0);
Index: ChangeLog
===================================================================
--- ChangeLog	(revision 21966)
+++ ChangeLog	(revision 21967)
@@ -39,6 +39,11 @@
 	* ext/socket/socket.c (sock_initialize): make 3rd argument, protocol,
 	  optional.
 
+Mon Feb  2 14:47:53 2009  Yukihiro Matsumoto  <matz@r...>
+
+	* array.c (rb_ary_sort_by_bang): new method.  requested in
+	  [ruby-core:21709]
+
 Mon Feb  2 14:22:56 2009  NAKAMURA Usaku  <usa@r...>
 
 	* ext/socket/constants.c (cmsg_type_arg): INET6 check.

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]