Re: Merging one Array with Another

2015-05-11 Thread via Digitalmars-d-learn
On Monday, 11 May 2015 at 07:12:05 UTC, Per Nordlöw wrote: I guess we should support bi-directional access through back() and popBack() aswell right? Does this mean that we need to statically check whether the SortedRanges support Bidirectional access or not? Or is a SortedRange by

Re: Merging one Array with Another

2015-05-11 Thread via Digitalmars-d-learn
On Monday, 11 May 2015 at 07:05:30 UTC, Per Nordlöw wrote: So I implemented a first working version of merge() by reusing roundRobin(). Working version at: https://github.com/nordlow/justd/blob/master/range_ex.d#L599 Destroy! I guess we should support bi-directional access through back()

Re: Merging one Array with Another

2015-05-11 Thread via Digitalmars-d-learn
On Thursday, 7 May 2015 at 21:53:24 UTC, Per Nordlöw wrote: Thanks. These are good ideas in general. I'm curious to why something like merge isn't already in Phobos. The most similar existing range in Phobos is probably So I implemented a first working version of merge() by reusing

Re: Merging one Array with Another

2015-05-11 Thread via Digitalmars-d-learn
On Monday, 11 May 2015 at 07:12:05 UTC, Per Nordlöw wrote: I guess we should support bi-directional access through back() and popBack() aswell right? I believe I have BidirectionalRange support aswell now at https://github.com/nordlow/justd/blob/master/range_ex.d#L597

Re: Merging one Array with Another

2015-05-08 Thread Andrea Fontana via Digitalmars-d-learn
On Thursday, 7 May 2015 at 21:53:24 UTC, Per Nordlöw wrote: On Thursday, 7 May 2015 at 13:38:23 UTC, Andrea Fontana wrote: Because it is a more generic operation and you can work on a lazy range. Anyway, to sort and to do uniq it isn't the fastest way. Or maybe I just didn't understand what

Re: Merging one Array with Another

2015-05-08 Thread via Digitalmars-d-learn
On Friday, 8 May 2015 at 08:27:19 UTC, Andrea Fontana wrote: Name could be misleading. This is a sortedrange: [4,3,2,1,0]. In your case minElement is 4, maxElement is 0 :) On ranges with more complex elements sort order can be even less obvious. I think first and back it's ok! Ok. I guess

Re: Merging one Array with Another

2015-05-08 Thread Andrea Fontana via Digitalmars-d-learn
On Friday, 8 May 2015 at 09:23:42 UTC, Per Nordlöw wrote: On Friday, 8 May 2015 at 08:27:19 UTC, Andrea Fontana wrote: Name could be misleading. This is a sortedrange: [4,3,2,1,0]. In your case minElement is 4, maxElement is 0 :) On ranges with more complex elements sort order can be even less

Re: Merging one Array with Another

2015-05-07 Thread via Digitalmars-d-learn
On Thursday, 7 May 2015 at 09:21:58 UTC, Per Nordlöw wrote: I was only interested in removing equal consequtive elements within the same range. I looked at UniqResult. What we need is to fix the typesystem with perhaps some traits the figure out which ranges (multi-layered meta-ranges)

Re: Merging one Array with Another

2015-05-07 Thread via Digitalmars-d-learn
On Wednesday, 6 May 2015 at 16:05:15 UTC, Andrea Fontana wrote: Maybe a way like this could be useful: http://dpaste.dzfl.pl/7b4b37b490a7 If r is a SortedRange this is very unneccesary wasteful because of the use AA. In that case you, instead, only want to remove equal consequtive elements

Re: Merging one Array with Another

2015-05-07 Thread Andrea Fontana via Digitalmars-d-learn
On Thursday, 7 May 2015 at 06:53:39 UTC, Per Nordlöw wrote: On Wednesday, 6 May 2015 at 16:05:15 UTC, Andrea Fontana wrote: Maybe a way like this could be useful: http://dpaste.dzfl.pl/7b4b37b490a7 If r is a SortedRange this is very unneccesary wasteful because of the use AA. In that case

Re: Merging one Array with Another

2015-05-07 Thread via Digitalmars-d-learn
On Thursday, 7 May 2015 at 08:03:41 UTC, Andrea Fontana wrote: It's not that difficult to implement. You just need to implement a merge() range that returns the min of all ranges' front(). Then you can define distinct() for SortedRange as: merge(sortedrange1, sortedrange2, sortedrange3).uniq

Re: Merging one Array with Another

2015-05-07 Thread via Digitalmars-d-learn
On Thursday, 7 May 2015 at 13:38:23 UTC, Andrea Fontana wrote: Because it is a more generic operation and you can work on a lazy range. Anyway, to sort and to do uniq it isn't the fastest way. Or maybe I just didn't understand what you really need. :) Thanks. These are good ideas in general.

Re: Merging one Array with Another

2015-05-07 Thread Andrea Fontana via Digitalmars-d-learn
On Thursday, 7 May 2015 at 09:21:58 UTC, Per Nordlöw wrote: On Thursday, 7 May 2015 at 08:03:41 UTC, Andrea Fontana wrote: It's not that difficult to implement. You just need to implement a merge() range that returns the min of all ranges' front(). Then you can define distinct() for

Re: Merging one Array with Another

2015-05-06 Thread Andrea Fontana via Digitalmars-d-learn
On Friday, 1 May 2015 at 19:08:51 UTC, Per Nordlöw wrote: What's the fastest Phobos-way of doing either x ~= y; // append x = x.uniq; // remove duplicates or x = (x ~ y).uniq; // append and remove duplicates in one go provided that T[] x, y; ? Maybe a way like this could

Re: Merging one Array with Another

2015-05-03 Thread via Digitalmars-d-learn
On Saturday, 2 May 2015 at 04:08:04 UTC, Ali Çehreli wrote: Interesting idea. I have defined a simple algorithm below to see how it could work (my skipped() function instead of uniq()). That's a bit above my current D experience to decide. What about just tweaking uniq() for now to propagate

Re: Merging one Array with Another

2015-05-03 Thread Ali Çehreli via Digitalmars-d-learn
On 05/03/2015 07:56 AM, Per =?UTF-8?B?Tm9yZGzDtnci?= per.nord...@gmail.com wrote: On Saturday, 2 May 2015 at 04:08:04 UTC, Ali Çehreli wrote: Interesting idea. I have defined a simple algorithm below to see how it could work (my skipped() function instead of uniq()). That's a bit above my

Re: Merging one Array with Another

2015-05-02 Thread via Digitalmars-d-learn
On Friday, 1 May 2015 at 19:30:08 UTC, Ilya Yaroshenko wrote: Both variants are wrong because uniq needs sorted ranges. Probably you need something like that: x = x.chain(y).sort.uniq.array; Interesting. Is x = x.chain(y).sort faster than x ~= y; x.sort; ? If so why?

Re: Merging one Array with Another

2015-05-02 Thread Meta via Digitalmars-d-learn
On Saturday, 2 May 2015 at 10:18:07 UTC, Per Nordlöw wrote: On Friday, 1 May 2015 at 19:30:08 UTC, Ilya Yaroshenko wrote: Both variants are wrong because uniq needs sorted ranges. Probably you need something like that: x = x.chain(y).sort.uniq.array; Interesting. Is x =

Re: Merging one Array with Another

2015-05-02 Thread via Digitalmars-d-learn
On Saturday, 2 May 2015 at 11:16:30 UTC, Meta wrote: Probably the latter is slower than the former, at the very least because the latter requires memory allocation whereas the former does not. Ahh!, auto x = [11, 3, 2, 4, 5, 1]; auto y = [0, 3, 10, 2, 4, 5, 1]; auto z =

Re: Merging one Array with Another

2015-05-01 Thread via Digitalmars-d-learn
On Friday, 1 May 2015 at 22:47:17 UTC, Ali Çehreli wrote: It is about the uniqueness of consecutive elements. It says unique consecutive elements. Ali Ah. Then I guess that if input is SortedRange then SortedRange should be returned. Thanks.

Re: Merging one Array with Another

2015-05-01 Thread Ali Çehreli via Digitalmars-d-learn
On 05/01/2015 06:39 PM, Per =?UTF-8?B?Tm9yZGzDtnci?= per.nord...@gmail.com wrote: On Friday, 1 May 2015 at 22:47:17 UTC, Ali Çehreli wrote: It is about the uniqueness of consecutive elements. It says unique consecutive elements. Ali Ah. Then I guess that if input is SortedRange then

Re: Merging one Array with Another

2015-05-01 Thread Ilya Yaroshenko via Digitalmars-d-learn
fix: completeSort(x.assumeSorted, y); x = x.chain(y).uniq.array; or (was fixed) y = y.sort().uniq.array; completeSort(x.assumeSorted, y); x ~= y;

Re: Merging one Array with Another

2015-05-01 Thread via Digitalmars-d-learn
On Friday, 1 May 2015 at 19:30:08 UTC, Ilya Yaroshenko wrote: Probably you need something like that: x = x.chain(y).sort.uniq.array; You're right: import std.stdio, std.algorithm, std.range; auto x = [11, 3, 2, 4, 5, 1]; auto y = [0, 3, 10, 2, 4, 5, 1];

Re: Merging one Array with Another

2015-05-01 Thread Ali Çehreli via Digitalmars-d-learn
On 05/01/2015 03:41 PM, Per =?UTF-8?B?Tm9yZGzDtnci?= per.nord...@gmail.com wrote: so why doesn't http://dlang.org/phobos/std_algorithm_iteration.html#.uniq say anything about need for sortness!? It is about the uniqueness of consecutive elements. It says unique consecutive elements.

Re: Merging one Array with Another

2015-05-01 Thread Ilya Yaroshenko via Digitalmars-d-learn
fix: completeSort(x.assumeSorted, y); x = x.chain(y).uniq.array; or completeSort(x.assumeSorted, y.uniq.array); x ~= y; On Friday, 1 May 2015 at 19:34:20 UTC, Ilya Yaroshenko wrote: If x is already sorted x = x.completeSort(y).uniq.array; On Friday, 1 May

Re: Merging one Array with Another

2015-05-01 Thread Ilya Yaroshenko via Digitalmars-d-learn
Both variants are wrong because uniq needs sorted ranges. Probably you need something like that: x = x.chain(y).sort.uniq.array; On Friday, 1 May 2015 at 19:08:51 UTC, Per Nordlöw wrote: What's the fastest Phobos-way of doing either x ~= y; // append x = x.uniq; // remove duplicates

Re: Merging one Array with Another

2015-05-01 Thread Ilya Yaroshenko via Digitalmars-d-learn
If x is already sorted x = x.completeSort(y).uniq.array; On Friday, 1 May 2015 at 19:30:08 UTC, Ilya Yaroshenko wrote: Both variants are wrong because uniq needs sorted ranges. Probably you need something like that: x = x.chain(y).sort.uniq.array; On Friday, 1 May 2015 at 19:08:51 UTC, Per

Merging one Array with Another

2015-05-01 Thread via Digitalmars-d-learn
What's the fastest Phobos-way of doing either x ~= y; // append x = x.uniq; // remove duplicates or x = (x ~ y).uniq; // append and remove duplicates in one go provided that T[] x, y; ?