From 97203729a90cbeecd852ba208439d2fd78a0b27d Mon Sep 17 00:00:00 2001 From: buty4649 Date: Sat, 20 Jan 2024 11:47:37 +0900 Subject: [PATCH] Add Enumerable#grep_v to mruby-enum-ext --- mrbgems/mruby-enum-ext/mrblib/enum.rb | 11 +++++++++++ mrbgems/mruby-enum-ext/test/enum.rb | 7 +++++++ 2 files changed, 18 insertions(+) diff --git a/mrbgems/mruby-enum-ext/mrblib/enum.rb b/mrbgems/mruby-enum-ext/mrblib/enum.rb index 2c9e8d3a5..28562a1b9 100644 --- a/mrbgems/mruby-enum-ext/mrblib/enum.rb +++ b/mrbgems/mruby-enum-ext/mrblib/enum.rb @@ -840,6 +840,17 @@ module Enumerable alias filter select + def grep_v(pattern, &block) + ary = [] + self.each{|*val| + sv = val.__svalue + unless pattern === sv + ary.push((block)? block.call(*val): sv) + end + } + ary + end + ## # call-seq: # enum.tally -> a_hash diff --git a/mrbgems/mruby-enum-ext/test/enum.rb b/mrbgems/mruby-enum-ext/test/enum.rb index 31181fe1a..98ace670e 100644 --- a/mrbgems/mruby-enum-ext/test/enum.rb +++ b/mrbgems/mruby-enum-ext/test/enum.rb @@ -195,3 +195,10 @@ end assert("Enumerable#tally") do assert_equal({"a"=>1, "b"=>2, "c"=>1}, ["a", "b", "c", "b"].tally) end + +assert("Enumerable#grep_v") do + a = [1, 2, 3, 4, 5, 0] + assert_equal [1, 5, 0], a.grep_v(2..4) + assert_equal [1, 2, 3, 4, 5, 0], a.grep_v(6..8) + assert_equal [2, 4, 6, 8, 10], a.grep_v(0) {|v| v * 2} +end