SList/DList ranges
Zhenya
zheny at list.ru
Tue Nov 27 11:19:02 PST 2012
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.
More information about the Digitalmars-d-learn
mailing list