[ruby-core:94918] [Ruby master Feature#8970] Array.zip and Array.product
From:
joshua.goodall@...
Date:
2019-09-12 03:40:15 UTC
List:
ruby-core #94918
Issue #8970 has been updated by inopinatus (Joshua GOODALL).
In my private library I have a higher-order function called "fold":
class Array
class << self
def fold((head, *tail), &block)
block::(head, *tail)
end
end
def fold(&block)
self.class.fold(self, &block)
end
end
then...
arrays = [["a", "b"], ["c"], ["d", "e"]]
arrays.fold(&:product)
#=> [["a", "c", "d"], ["a", "c", "e"], ["b", "c", "d"], ["b", "c", "e"]]
----------------------------------------
Feature #8970: Array.zip and Array.product
https://bugs.ruby-lang.org/issues/8970#change-81532
* Author: sawa (Tsuyoshi Sawada)
* Status: Open
* Priority: Normal
* Assignee:
* Target version:
----------------------------------------
=begin
Most of the time when I use `Array#zip` or `Array#product`, I feel cumbursome that I have to take out the first array and pass it as a receiver. For example, if I have
a = [[:a, :b, :c], [:d, :e, :f], [:g, :h, :i]]
I have to do something like this:
a.first.zip(*a.drop(1)){...}
a.first.product(*a.drop(1)){...}
Sometimes, the receiver (i.e., the first array) has significance, but most other times, that breaks asymmetry, making the code look ugly.
I would be happy if we had `Array.zip` and `Array.product` in addition so that we can do it like this:
Array.zip(*a){...}
Array.product(*a){...}
=end
--
https://bugs.ruby-lang.org/
Unsubscribe: <mailto:ruby-core-request@ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>