Issue #16146 has been updated by jonathanhefner (Jonathan Hefner).


Dan0042 (Daniel DeLorme) wrote:
> What you're asking for is a O(n=B2) operation. I'm not sure it's a good i=
dea to make that so easy and transparent as a core method.

Although the given example specified a two-argument block, the original pos=
t references `uniq`, which accepts a one-argument block.  Using a one-argum=
ent block can result in an O(n) implementation.  Here is a different exampl=
e:

```ruby
Dependency =3D Struct.new(:name, :version)

deps1 =3D [Dependency.new("foo", "1.1"), Dependency.new("bar", "2.0"), Depe=
ndency.new("qux", "1.0")]

deps2 =3D [Dependency.new("foo", "1.0"), Dependency.new("bar", "1.0")] =


deps1.difference(deps2, &:name)
# =3D=3D [Dependency.new("qux", "1.0")]

deps1.difference(deps2){|dep| [dep.name, dep.version[/^\d+/]] }
# =3D=3D [Dependency.new("bar", "2.0"), Dependency.new("qux", "1.0")]
```



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

* 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 com=
parison between individual items in arrays.

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

But specifically, I noticed nearly all the existing Array functions allow u=
s 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 wa=
s 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=3Dunsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>