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/mrblib/enum.rb | 4 ---- mrbgems/mruby-enum-ext/test/enum.rb | 3 --- 2 files changed, 7 deletions(-) (limited to 'mrbgems/mruby-enum-ext') diff --git a/mrbgems/mruby-enum-ext/mrblib/enum.rb b/mrbgems/mruby-enum-ext/mrblib/enum.rb index 99b9cddba..b427bd67e 100644 --- a/mrbgems/mruby-enum-ext/mrblib/enum.rb +++ b/mrbgems/mruby-enum-ext/mrblib/enum.rb @@ -811,10 +811,6 @@ module Enumerable h end - def nil.to_h - {} - end - def uniq(&block) hash = {} if block 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 57a0132b41920ea14b903113586bf970c8210efa Mon Sep 17 00:00:00 2001 From: "Yukihiro \"Matz\" Matsumoto" Date: Mon, 16 Sep 2019 07:55:18 +0900 Subject: Add `filter` aliases for `Enumerable` and `Hash`. --- mrbgems/mruby-array-ext/mrblib/array.rb | 1 + mrbgems/mruby-enum-ext/mrblib/enum.rb | 1 + mrbgems/mruby-hash-ext/mrblib/hash.rb | 3 +++ 3 files changed, 5 insertions(+) (limited to 'mrbgems/mruby-enum-ext') diff --git a/mrbgems/mruby-array-ext/mrblib/array.rb b/mrbgems/mruby-array-ext/mrblib/array.rb index f9f232321..5201cbe57 100644 --- a/mrbgems/mruby-array-ext/mrblib/array.rb +++ b/mrbgems/mruby-array-ext/mrblib/array.rb @@ -955,4 +955,5 @@ class Array alias append push alias prepend unshift + alias filter! select! end diff --git a/mrbgems/mruby-enum-ext/mrblib/enum.rb b/mrbgems/mruby-enum-ext/mrblib/enum.rb index b427bd67e..171737e28 100644 --- a/mrbgems/mruby-enum-ext/mrblib/enum.rb +++ b/mrbgems/mruby-enum-ext/mrblib/enum.rb @@ -826,4 +826,5 @@ module Enumerable end hash.values end + alias filter select end diff --git a/mrbgems/mruby-hash-ext/mrblib/hash.rb b/mrbgems/mruby-hash-ext/mrblib/hash.rb index 547f3404a..33e2dcb9f 100644 --- a/mrbgems/mruby-hash-ext/mrblib/hash.rb +++ b/mrbgems/mruby-hash-ext/mrblib/hash.rb @@ -494,4 +494,7 @@ class Hash self.fetch(k, &block) end end + + alias filter select + alias filter! select! 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') 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') 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 From c7c344dbc24beedf37bbdb545f7171c23562a550 Mon Sep 17 00:00:00 2001 From: KOBAYASHI Shuji Date: Wed, 18 Sep 2019 19:33:15 +0900 Subject: Fix `Enumerable#filter_map` without block; ref d380c7d2 --- mrbgems/mruby-enum-ext/mrblib/enum.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'mrbgems/mruby-enum-ext') diff --git a/mrbgems/mruby-enum-ext/mrblib/enum.rb b/mrbgems/mruby-enum-ext/mrblib/enum.rb index 178496e7e..f15511925 100644 --- a/mrbgems/mruby-enum-ext/mrblib/enum.rb +++ b/mrbgems/mruby-enum-ext/mrblib/enum.rb @@ -828,7 +828,7 @@ module Enumerable end def filter_map(&blk) - return to_enum(:find_index, val) unless blk + return to_enum(:filter_map) unless blk ary = [] self.each do |x| -- cgit v1.2.3