uniq and array of enum members (That are all strings)
bauss
jj_1337 at live.dk
Wed Jan 16 16:21:12 UTC 2019
On Wednesday, 16 January 2019 at 16:12:28 UTC, H. S. Teoh wrote:
> On Wed, Jan 16, 2019 at 03:57:49PM +0000, bauss via
> Digitalmars-d-learn wrote:
>> Is there a way to achieve the following:
> [...]
>> enum Foo : string
>> {
>> a = "aa",
>> b = "bb",
>> c = "cc"
>> }
>>
>> void main()
>> {
>> auto a = [Foo.a, Foo.b, Foo.a, Foo.b, Foo.c];
>>
>> auto b = a.uniq;
>>
>> writeln(b);
>> // Expected output: [a, b, c]
>> // Outputs: [a, b, a, b, c]
>> }
>
> .uniq only works on adjacent identical elements. You should
> sort your array first.
>
> If you need to preserve the original order but eliminate
> duplicates, then you could use an AA to keep track of what has
> been seen. E.g.:
>
> bool[string] seen;
> auto b = a.filter!((e) {
> if (e in seen) return false;
> seen[e] = true;
> return true;
> });
>
>
> T
Sorting will not work in my case though because it's an enum of
strings that are not sorted alphabetically.
Right now I'm doing it manually by a foreach in similar way
you're using filter.
I just feel like that's an overkill for something so trivial.
More information about the Digitalmars-d-learn
mailing list