Project

General

Profile

Actions

Feature #11797

closed

`Enumerator#with_object` with multiple objects

Added by sawa (Tsuyoshi Sawada) over 8 years ago. Updated almost 5 years ago.

Status:
Closed
Assignee:
-
Target version:
-
[ruby-core:72001]

Description

Sometimes, when working with Enumerator#with_object, I want to keep some additional temporary objects besides the one to return. A use case is as follows (I got this from this StackOverflow question: http://stackoverflow.com/questions/3418123). Suppose I have an enumerator created from an array:

e = ["a", "b", "c", "c", "a", "c"].to_enum

and want to get an array of its repeated elements in the order they are repeated (i.e., appears for the second time):

# => ["c", "a"]

I can do it using Enumerator#with_object like this:

e.to_enum.with_object([{}, []]){|c, (h, a)| h[c] ? a.push(c) : h.store(c, true)}.last.uniq

Here, I am getting the array referred to as a in the block, but besides that, I am using a temporal hash h. I thought it would be nice if Enumerator#with_object accepts one or more objects, pass them individually as block arguments, and returns only the last argument so that I can do this:

e.to_enum.with_object({}, []){|c, h, a| h[c] ? a.push(c) : h.store(c, true)}.uniq
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0