Thread overview | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
February 05, 2015 Do you have a better way to remove element from a array? | ||||
---|---|---|---|---|
| ||||
Now I can remove element from a array: module removeOne; import std.stdio; import std.array; import std.algorithm; void main() { int[] aa =[1,2,3,4,5]; aa = aa[0..2] ~aa[3..$]; writeln(aa); //ok remove(aa,1); writeln(aa);//get error result } You will found the error result,why? Thank you. |
February 05, 2015 Re: Do you have a better way to remove element from a array? | ||||
---|---|---|---|---|
| ||||
Posted in reply to FrankLike | On Thursday, 5 February 2015 at 13:25:37 UTC, FrankLike wrote: > Now I can remove element from a array: > > module removeOne; > import std.stdio; > import std.array; > import std.algorithm; > > void main() > { > int[] aa =[1,2,3,4,5]; > > aa = aa[0..2] ~aa[3..$]; > writeln(aa); //ok > remove(aa,1); > writeln(aa);//get error result > } > > You will found the error result,why? > > Thank you. Works as designed: http://dlang.org/phobos/std_algorithm.html#.remove |
February 05, 2015 Re: Do you have a better way to remove element from a array? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Tobias Pankrath | On Thursday, 5 February 2015 at 13:29:30 UTC, Tobias Pankrath wrote:
> Works as designed: http://dlang.org/phobos/std_algorithm.html#.remove
Thank you.
aa = remove(aa,1);//ok
but how to remove one item?
such as aa.remove(2) ?
|
February 05, 2015 Re: Do you have a better way to remove element from a array? | ||||
---|---|---|---|---|
| ||||
Posted in reply to FrankLike | On Thursday, 5 February 2015 at 13:55:59 UTC, FrankLike wrote:
> On Thursday, 5 February 2015 at 13:29:30 UTC, Tobias Pankrath wrote:
>
>> Works as designed: http://dlang.org/phobos/std_algorithm.html#.remove
>
> Thank you.
> aa = remove(aa,1);//ok
>
> but how to remove one item?
> such as aa.remove(2) ?
I don't get your question.
|
February 05, 2015 Re: Do you have a better way to remove element from a array? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Tobias Pankrath | Tobias Pankrath: > Works as designed: http://dlang.org/phobos/std_algorithm.html#.remove Unfortunately it's one of the worst designed functions of Phobos: https://issues.dlang.org/show_bug.cgi?id=10959 Bye, bearophile |
February 05, 2015 Re: Do you have a better way to remove element from a array? | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | On Thursday, 5 February 2015 at 14:09:10 UTC, bearophile wrote:
> Tobias Pankrath:
>
>> Works as designed: http://dlang.org/phobos/std_algorithm.html#.remove
>
> Unfortunately it's one of the worst designed functions of Phobos:
> https://issues.dlang.org/show_bug.cgi?id=10959
>
> Bye,
> bearophile
Yes,A.remove(item) or A.removeAt(index)
They is better than now.
|
February 05, 2015 Re: Do you have a better way to remove element from a array? | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | On Thursday, 5 February 2015 at 14:09:10 UTC, bearophile wrote: Yes,A.remove(item) or A.removeAt(index) They are better than now. |
February 05, 2015 Re: Do you have a better way to remove element from a array? | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | On Thursday, 5 February 2015 at 14:09:10 UTC, bearophile wrote:
> Tobias Pankrath:
>
>> Works as designed: http://dlang.org/phobos/std_algorithm.html#.remove
>
> Unfortunately it's one of the worst designed functions of Phobos:
> https://issues.dlang.org/show_bug.cgi?id=10959
>
> Bye,
> bearophile
It seems your argument is that remove is poorly designed because it's not destructive. Or am I missing your argument?
|
February 05, 2015 Re: Do you have a better way to remove element from a array? | ||||
---|---|---|---|---|
| ||||
Posted in reply to bachmeier | bachmeier:
> It seems your argument is that remove is poorly designed because it's not destructive. Or am I missing your argument?
It has to be a void function (or perhaps bettter it can return true/false if it has removed the item, so it becomes @nogc and nothrow).
And it has to remove the first item equal to the given one.
You can then add a second function that removes at a given index (like removeAt).
Bye,
bearophile
|
February 05, 2015 Re: Do you have a better way to remove element from a array? | ||||
---|---|---|---|---|
| ||||
Posted in reply to bearophile | On 2015-02-05 at 17:25, bearophile wrote:
> It has to be a void function (or perhaps bettter it can return true/false if it has removed the item, so it becomes @nogc and nothrow).
> And it has to remove the first item equal to the given one.
> You can then add a second function that removes at a given index (like removeAt).
I was never a fan of STL's erase-remove idiom, although the decoupling of algorithms and containers is in general a great idea. However, in D algorithms can be smarter, because they operate on ranges instead of iterators. I don't see why remove has to follow the C++ example. Therefore I have to ask:
Is there any reason why `remove` doesn't take the range by reference and `popBack` as many elements as were removed?
|
Copyright © 1999-2021 by the D Language Foundation