digitalmars.D.learn - Strange behavior of the function find() and remove()
- Dennis Ritchie (8/8) Mar 08 2015 This is normal behavior?
- safety0ff (7/8) Mar 08 2015 Yes it is normal, there are two potential points of confusion:
- Dennis Ritchie (2/11) Mar 08 2015 Thanks.
- anonymous example.com (6/14) Mar 08 2015 Yes, works as designed. `remove` writes over removed slots and
This is normal behavior? import std.stdio; import std.algorithm; void main() { auto a = [3, 5, 8]; writeln(find(remove(a, 1), 5).length != 0); // prints false writeln(a); // prints [3, 8, 8] ??? }
Mar 08 2015
On Sunday, 8 March 2015 at 21:34:25 UTC, Dennis Ritchie wrote:This is normal behavior?Yes it is normal, there are two potential points of confusion: - remove mutates the input range and returns a shortened slice to the range which excludes the removed element. - remove takes an index as its second argument, not an element. For more information see: https://issues.dlang.org/show_bug.cgi?id=10959
Mar 08 2015
On Sunday, 8 March 2015 at 21:58:20 UTC, safety0ff wrote:On Sunday, 8 March 2015 at 21:34:25 UTC, Dennis Ritchie wrote:Thanks.This is normal behavior?Yes it is normal, there are two potential points of confusion: - remove mutates the input range and returns a shortened slice to the range which excludes the removed element. - remove takes an index as its second argument, not an element. For more information see: https://issues.dlang.org/show_bug.cgi?id=10959
Mar 08 2015
On Sunday, 8 March 2015 at 21:34:25 UTC, Dennis Ritchie wrote:This is normal behavior? import std.stdio; import std.algorithm; void main() { auto a = [3, 5, 8]; writeln(find(remove(a, 1), 5).length != 0); // prints false writeln(a); // prints [3, 8, 8] ??? }Yes, works as designed. `remove` writes over removed slots and returns shrunk (shrinked?) slice. It does not shrink the range at the call site. To update `a`, write the result of `remove` to it: writeln(find(a = remove(a, 1), 5).length != 0); // still false writeln(a); // prints [3, 8]
Mar 08 2015