Design question regarding saving changes in the original array and/or returning a new set
Paul Backus
snarwin at gmail.com
Sun Oct 23 17:36:25 UTC 2022
On Sunday, 23 October 2022 at 13:32:44 UTC, matheus wrote:
> I have a design question and I'd like to hear some advice.
> Let's say that I want to create a method to sort an array:
>
> arr.sort(asc);
>
> I think usually this would usually return a new set of that
> array but now sorted.
>
> But If I want to do this in the original, I think I would do
> this:
>
> arr.sort(asc).save();
>
> The problem with this, it would create a new set and
> assign/copy back to the caller, which would be a waste. So I
> thought about this:
>
> arr.save.sort(asc);
>
> Then save would tell to "sort()" what to do beforehand, like
> passing some argument saying that the sort should be done
> direct in the caller and no copy.
>
> Is this (The latter) an approach you would use? Or there is a
> better way to do this.
You say your idea is "like passing some argument", so why not
actually pass an argument?
For example:
enum Direction { asc, desc }
enum InPlace : bool { no, yes }
ref Arr sort(ref Arr arr, Direction dir, InPlace inPlace =
InPlace.no)
{
if (inPlace) {
arr.sortInPlace(dir);
return arr;
} else {
return arr.sortedCopy(dir);
}
}
Usage would look like this:
auto sorted = arr.sort(asc); // sorted copy
arr.sort(desc, InPlace.yes); // sort in place
More information about the Digitalmars-d-learn
mailing list