View mode: basic / threaded / horizontal-split · Log in · Help
October 24, 2010
delete an element from an array
Hello,

Is there a function in the standard library to delete an element from
an array (or range)? Something like:

 auto a = [1, 2, 3, 4, 5, 6];
 auto b = delete(a, 4);

 assert([1, 2, 3, 4, 6] == b);

I've noticed there is eliminate in std.algorithm, which seems to be
doing just that, but it's commented out.

It's not difficult to roll my own, (with the help of indexOf and
remove), but I thought that this is pretty common operation so it
should be in the standard library.


adam.
October 24, 2010
Re: delete an element from an array
On Sun, 24 Oct 2010 13:02:24 +0200, Adam Cigánek <adam.ciganek@gmail.com>  
wrote:

> Hello,
>
> Is there a function in the standard library to delete an element from
> an array (or range)? Something like:
>
>   auto a = [1, 2, 3, 4, 5, 6];
>   auto b = delete(a, 4);
>
>   assert([1, 2, 3, 4, 6] == b);
>
> I've noticed there is eliminate in std.algorithm, which seems to be
> doing just that, but it's commented out.
>
> It's not difficult to roll my own, (with the help of indexOf and
> remove), but I thought that this is pretty common operation so it
> should be in the standard library.

std.algorithm has remove, which does what you want.

-- 
Simen
October 24, 2010
Re: delete an element from an array
remove removes element at a given offset. I want to remove element
with a given value. This is example shows it better:

 auto a = ["foo", "bar", "baz"];
 auto b = delete(a, "bar");

 assert(["foo", "baz"] == b);


adam.

2010/10/24 Simen kjaeraas <simen.kjaras@gmail.com>:
> On Sun, 24 Oct 2010 13:02:24 +0200, Adam Cigánek <adam.ciganek@gmail.com>
> wrote:
>
>> Hello,
>>
>> Is there a function in the standard library to delete an element from
>> an array (or range)? Something like:
>>
>>  auto a = [1, 2, 3, 4, 5, 6];
>>  auto b = delete(a, 4);
>>
>>  assert([1, 2, 3, 4, 6] == b);
>>
>> I've noticed there is eliminate in std.algorithm, which seems to be
>> doing just that, but it's commented out.
>>
>> It's not difficult to roll my own, (with the help of indexOf and
>> remove), but I thought that this is pretty common operation so it
>> should be in the standard library.
>
> std.algorithm has remove, which does what you want.
>
> --
> Simen
>
October 24, 2010
Re: delete an element from an array
On Sunday 24 October 2010 04:24:07 Adam Cigánek wrote:
> remove removes element at a given offset. I want to remove element
> with a given value. This is example shows it better:
> 
>   auto a = ["foo", "bar", "baz"];
>   auto b = delete(a, "bar");
> 
>   assert(["foo", "baz"] == b);
> 
> 
> adam.
> 
> 2010/10/24 Simen kjaeraas <simen.kjaras@gmail.com>:
> > On Sun, 24 Oct 2010 13:02:24 +0200, Adam Cigánek <adam.ciganek@gmail.com>
> > 
> > wrote:
> >> Hello,
> >> 
> >> Is there a function in the standard library to delete an element from
> >> an array (or range)? Something like:
> >> 
> >>  auto a = [1, 2, 3, 4, 5, 6];
> >>  auto b = delete(a, 4);
> >> 
> >>  assert([1, 2, 3, 4, 6] == b);
> >> 
> >> I've noticed there is eliminate in std.algorithm, which seems to be
> >> doing just that, but it's commented out.
> >> 
> >> It's not difficult to roll my own, (with the help of indexOf and
> >> remove), but I thought that this is pretty common operation so it
> >> should be in the standard library.
> > 
> > std.algorithm has remove, which does what you want.
> > 
> > --
> > Simen

Well, then use indexOf() to get the offset and remove() to remove the element.

- Jonathan M Davis
October 24, 2010
Re: delete an element from an array
> Well, then use indexOf() to get the offset and remove() to remove the element.
>

Yes, that's what I'm doing. I just thought that I maybe overlook such
function in the standard library. So there is none. No problem, I'll
keep using my own. Still think it would be useful to add it, because I
believe such operation is quite common.


thanks,
adam.
October 24, 2010
Re: delete an element from an array
Jonathan M Davis:

> Well, then use indexOf() to get the offset and remove() to remove the element.

But you must test the result value of indexOf, because it returns -1 (a signed value, probably an integer, not a signed word, so it may give troubles on 64 bit systems) when the item is missing. This is why Python has both a way to remove an item by index and by value.

Bye,
bearophile
October 24, 2010
Re: delete an element from an array
On Sun, 24 Oct 2010 09:31:12 -0400
bearophile <bearophileHUGS@lycos.com> wrote:

> Jonathan M Davis:
> 
> > Well, then use indexOf() to get the offset and remove() to remove the element.
> 
> But you must test the result value of indexOf, because it returns -1 (a signed value, probably an integer, not a signed word, so it may give troubles on 64 bit systems) when the item is missing. This is why Python has both a way to remove an item by index and by value.
> 
> Bye,
> bearophile

In my opinion, such non-obvious complications are good reasons to have seemingly trivial operations implemented as builtin routines. (and should throw error in case of failure)


Denis
-- -- -- -- -- -- --
vit esse estrany ☣

spir.wikidot.com
October 24, 2010
Re: delete an element from an array
> In my opinion, such non-obvious complications are good reasons to have seemingly trivial operations implemented as builtin routines. (and should throw error in case of failure)

Or have them in the standard library - better for keeping the language small.

adam.

>
>
> Denis
> -- -- -- -- -- -- --
> vit esse estrany ☣
>
> spir.wikidot.com
>
>
October 24, 2010
Re: delete an element from an array
On Sun, 24 Oct 2010 15:51:29 +0200
Adam Cigánek <adam.ciganek@gmail.com> wrote:

> > In my opinion, such non-obvious complications are good reasons to have seemingly trivial operations implemented as builtin routines. (and should throw error in case of failure)
> 
> Or have them in the standard library - better for keeping the language small.
> 
> adam.

Yes, that's what I meant, in fact (but was unclear).

Denis
-- -- -- -- -- -- --
vit esse estrany ☣

spir.wikidot.com
October 24, 2010
Re: delete an element from an array
On 24/10/2010 12:24, Adam Cigánek wrote:
> remove removes element at a given offset. I want to remove element
> with a given value. This is example shows it better:
<snip>

Your new example doesn't show it better, it's the only one you've given 
that shows it at all.  What you had originally was

  auto a = [1, 2, 3, 4, 5, 6];
  auto b = delete(a, 4);

  assert([1, 2, 3, 4, 6] == b);

which shows the removal of the element at index 4, not the element with 
value 4.

But there are further questions to be answered:

- What do you want it to do if the value isn't in the array?  Just 
return the original array, return a copy of the original array, or throw 
an exception?

- What do you want it to do if the value is in the array more than once? 
 Remove the first, remove the last, remove all of them, or pick one at 
random?

Stewart.
« First   ‹ Prev
1 2
Top | Discussion index | About this forum | D home