Add a block argument with Array#uniq
authorJun Hiroe <[email protected]>
Fri, 18 Apr 2014 13:28:42 +0000 (18 22:28 +0900)
committerJun Hiroe <[email protected]>
Fri, 18 Apr 2014 14:13:10 +0000 (18 23:13 +0900)
mrbgems/mruby-array-ext/mrblib/array.rb
mrbgems/mruby-array-ext/test/array.rb

index 0da5d05..6c47235 100644 (file)
@@ -43,16 +43,24 @@ class Array
 
   ##
   # call-seq:
-  #    ary.uniq   -> new_ary
+  #    ary.uniq                -> new_ary
+  #    ary.uniq { |item| ... } -> new_ary
   #
   # Returns a new array by removing duplicate values in +self+.
   #
   #    a = [ "a", "a", "b", "b", "c" ]
   #    a.uniq   #=> ["a", "b", "c"]
   #
-  def uniq
+  #    b = [["student","sam"], ["student","george"], ["teacher","matz"]]
+  #    b.uniq { |s| s.first } # => [["student", "sam"], ["teacher", "matz"]]
+  #
+  def uniq(&block)
     ary = self.dup
-    ary.uniq!
+    if block
+      ary.uniq!(&block)
+    else 
+      ary.uniq!
+    end
     ary
   end
 
index 3be17f1..d157a5b 100644 (file)
@@ -48,6 +48,9 @@ assert("Array#uniq") do
   a = [1, 2, 3, 1]
   assert_equal [1, 2, 3], a.uniq
   assert_equal [1, 2, 3, 1], a
+
+  b = [["student","sam"], ["student","george"], ["teacher","matz"]]
+  assert_equal [["student", "sam"], ["teacher", "matz"]], b.uniq { |s| s.first } 
 end
 
 assert("Array#-") do