Checking all elements are unique.
pineapple via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Wed Aug 31 04:36:45 PDT 2016
On Wednesday, 31 August 2016 at 07:40:39 UTC, Dorian Haglund
wrote:
> Hello,
>
> I have an array of objects of class C which contain a id member.
> I want to figure out if all the id members are unique using
> functional primitives.
>
> For example, if I have:
>
> class C
> {
> int id;
> }
>
> and an array of C 'Cs';
>
> My idea was to do:
>
> auto ids = Cs.map!(c => c.id);
> assert(equal(ids.sort().uniq(), ids.sort()));
>
> But it doesn't compile because I can't can call sort on ids.
>
> Any idea why ? and how to solve my initial problem, which is to
> check all ids are unique.
>
> Regards,
>
> Dorian
Your post inspired me to write this addition to my D library,
I'll commit it later today but you can use it straightaway by
just adding this file. It will be far more efficient than any of
the other solutions posted here.
The file - http://pastebin.com/RN2nagEn
The library - https://github.com/pineapplemachine/mach.d
Example usage:
import std.stdio;
import mach.range.unique;
class C{
this(int id){this.id = id;}
int id;
}
auto c0 = [new C(0), new C(1), new C(2), new C(3)];
auto c1 = [new C(0), new C(1), new C(2), new C(3), new C(0)];
c0.unique!(c => c.id).writeln; // true
c1.unique!(c => c.id).writeln; // false
More information about the Digitalmars-d-learn
mailing list