On Tuesday, 27 November 2012 at 07:51:16 UTC, Jonathan M Davis
wrote:
On Monday, November 26, 2012 19:49:51 Zhenya wrote:
Hi!
I read the spec,but I didn't find any function,that removes
concrete element from
list.I am not familiar with D's ranges,so could you help me
please?
What do you mean by removing concrete elements? How is that any
different from
any other element in the list? If you want to remove elements
from the list,
then use one of the *remove functions. [] on the list to get a
range over all
of the elements in the list, find to find the element that you
want, and then
take to get a range with just the elements from the front of
the range that
you want to remove. Hopefully this will enlighten you somewhat:
import std.algorithm;
import std.container;
import std.range;
import std.stdio;
void main()
{
auto list = make!(SList!int)(4, 5, 6, 7, 22, 9, 5, 4);
assert(equal(list[], [4, 5, 6, 7, 22, 9, 5, 4]));
auto found = find(list[], 6);
assert(equal(found.save, [6, 7, 22, 9, 5, 4]));
list.linearRemove(take(found, 3));
assert(equal(list[], [4, 5, 9, 5, 4]));
list.linearRemove(take(find(list[], 5), 1));
assert(equal(list[], [4, 9, 5, 4]));
}
Unfortunately, std.container needs a fair bit of work in terms
of some of the
details - particularly with its functions which accept and/or
return ranges,
so it doesn't always work like it should yet. It's very much a
work in
progress right now. But the above should give you the basic
idea.
As for ranges in general, the best resource on them at this
point would be
this chapter from an online book on D:
http://ddili.org/ders/d.en/ranges.html
If you're going to be using Phobos much (which is likely if
you're using D),
then you're going to need to understand ranges, because Phobos
uses them quite
heavily.
- Jonathan M Davis
Thank you,understood.I just want a container with fast
insert/remove.Something like C++ std::list.But when I look at you
example I understand that remove is linear,so maybe I need
assosiative array or RedBlackTree.
And thank you for a link,I will learn ranges surely.