[ruby-core:95675] [Ruby master Feature#16146] Array .difference allow custom comparison

From: jonathan@...
Date: 2019-11-04 19:25:30 UTC
List: ruby-core #95675
Issue #16146 has been updated by jonathanhefner (Jonathan Hefner).


duerst (Martin Dst) wrote:
> Well, that assumes that the block return values can be ordered. But it's easy to create cases where values can be compared for equality, but not ordered. Example: `[1, 'abc']`.

I'm not sure that I follow.  Here is a naive implementation of what I was envisioning:

```ruby
def difference(*other_arrays, &block)
  if block
    rejected = other_arrays.flatten(1).map(&block).to_set
    self.reject{|element| rejected.include?(block.call(element)) }
  else
    # original implementation
  end
end
```

> Also, this proposal is about adding a block to `difference`, but if we do that, we should add it to `union` and `intersection` and so on, too.

Agreed, that would probably be best for consistency.


----------------------------------------
Feature #16146: Array .difference allow custom comparison
https://bugs.ruby-lang.org/issues/16146#change-82462

* Author: ngomez (Nancy Gomez)
* Status: Open
* Priority: Normal
* Assignee: 
* Target version: 
----------------------------------------
Hello!

I wanted to know if there's any plan to implement the ability to define comparison between individual items in arrays.

Here is where I originally asked the question on Stack Overflow: https://stackoverflow.com/questions/57316775/is-there-any-way-to-specify-how-to-compare-of-array-of-objects-for-difference-f

But specifically, I noticed nearly all the existing Array functions allow us to define ways for comparison, such as #uniq but #difference does not :( This is quite unfortunate but I'm hoping it's just because this function was introduced in 2.6.0, and hopefully this feature can be implemented?

Thanks for any and all info :)



-- 
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>

In This Thread

Prev Next