From 2d520eaf6f60e1bb5224b56f433fc9187b10c6cf Mon Sep 17 00:00:00 2001 From: KOBAYASHI Shuji Date: Wed, 24 Jul 2019 20:13:26 +0900 Subject: Move `NilClass#to_h` to `mruby-object-ext` from `mruby-enum-ext` --- mrbgems/mruby-enum-ext/test/enum.rb | 3 --- 1 file changed, 3 deletions(-) (limited to 'mrbgems/mruby-enum-ext/test') diff --git a/mrbgems/mruby-enum-ext/test/enum.rb b/mrbgems/mruby-enum-ext/test/enum.rb index 64b1bbda9..6929d8ddc 100644 --- a/mrbgems/mruby-enum-ext/test/enum.rb +++ b/mrbgems/mruby-enum-ext/test/enum.rb @@ -186,8 +186,5 @@ assert("Enumerable#to_h") do h = c.new.to_h assert_equal Hash, h.class assert_equal h0, h - # mruby-enum-ext also provides nil.to_h - assert_equal Hash.new, nil.to_h - assert_equal({1=>4,3=>8}, c.new.to_h{|k,v|[k,v*2]}) end -- cgit v1.2.3 From d380c7d26f1056c021281d56c2d7110f9d5ce2d1 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Mon, 16 Sep 2019 08:01:08 +0900 Subject: Implement `filter_map` from Ruby2.6. --- mrbgems/mruby-enum-ext/mrblib/enum.rb | 12 ++++++++++++ mrbgems/mruby-enum-ext/test/enum.rb | 5 +++++ 2 files changed, 17 insertions(+) (limited to 'mrbgems/mruby-enum-ext/test') diff --git a/mrbgems/mruby-enum-ext/mrblib/enum.rb b/mrbgems/mruby-enum-ext/mrblib/enum.rb index 171737e28..e354a4c5e 100644 --- a/mrbgems/mruby-enum-ext/mrblib/enum.rb +++ b/mrbgems/mruby-enum-ext/mrblib/enum.rb @@ -826,5 +826,17 @@ module Enumerable end hash.values end + + def filter_map(&blk) + return to_enum(:find_index, val) unless blk + + ary = [] + self.each do |x| + x = blk.call(x) + ary.push x if x + end + ary + end + alias filter select end diff --git a/mrbgems/mruby-enum-ext/test/enum.rb b/mrbgems/mruby-enum-ext/test/enum.rb index 6929d8ddc..8c8daa678 100644 --- a/mrbgems/mruby-enum-ext/test/enum.rb +++ b/mrbgems/mruby-enum-ext/test/enum.rb @@ -188,3 +188,8 @@ assert("Enumerable#to_h") do assert_equal h0, h assert_equal({1=>4,3=>8}, c.new.to_h{|k,v|[k,v*2]}) end + + +assert("Enumerable#filter_map") do + assert_equal [4, 8, 12, 16, 20], (1..10).filter_map{|i| i * 2 if i%2==0} +end -- cgit v1.2.3 From a57b6f8ed06b96747d9521b3212a7959f7371a15 Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Mon, 16 Sep 2019 08:06:22 +0900 Subject: Implement `Enumerable` tally from Ruby2.7. --- mrbgems/mruby-enum-ext/mrblib/enum.rb | 17 +++++++++++++++++ mrbgems/mruby-enum-ext/test/enum.rb | 5 ++++- 2 files changed, 21 insertions(+), 1 deletion(-) (limited to 'mrbgems/mruby-enum-ext/test') diff --git a/mrbgems/mruby-enum-ext/mrblib/enum.rb b/mrbgems/mruby-enum-ext/mrblib/enum.rb index e354a4c5e..178496e7e 100644 --- a/mrbgems/mruby-enum-ext/mrblib/enum.rb +++ b/mrbgems/mruby-enum-ext/mrblib/enum.rb @@ -839,4 +839,21 @@ module Enumerable end alias filter select + + ## + # call-seq: + # enum.tally -> a_hash + # + # Tallys the collection. Returns a hash where the keys are the + # elements and the values are numbers of elements in the collection + # that correspond to the key. + # + # ["a", "b", "c", "b"].tally #=> {"a"=>1, "b"=>2, "c"=>1} + def tally + hash = {} + self.each do |x| + hash[x] = (hash[x]||0)+1 + end + hash + end end diff --git a/mrbgems/mruby-enum-ext/test/enum.rb b/mrbgems/mruby-enum-ext/test/enum.rb index 8c8daa678..f0301a2d9 100644 --- a/mrbgems/mruby-enum-ext/test/enum.rb +++ b/mrbgems/mruby-enum-ext/test/enum.rb @@ -189,7 +189,10 @@ assert("Enumerable#to_h") do assert_equal({1=>4,3=>8}, c.new.to_h{|k,v|[k,v*2]}) end - assert("Enumerable#filter_map") do assert_equal [4, 8, 12, 16, 20], (1..10).filter_map{|i| i * 2 if i%2==0} end + +assert("Enumerable#tally") do + assert_equal({"a"=>1, "b"=>2, "c"=>1}, ["a", "b", "c", "b"].tally) +end -- cgit v1.2.3