Thread overview | |||||||
---|---|---|---|---|---|---|---|
|
December 31, 2010 phobos std.container example | ||||
---|---|---|---|---|
| ||||
Hi. Woud anybody please show phobos std.container usage sample? I need list/array of objects/structures. Every item have list/array of another objects/structures. I need possibility: 1) to construct such lists/arrays; 2) to enumerate items 3) to search item by "name" field 4) insert/remove/replace item I tried to read docs with dmd2 distribution, but failed to understand. I never used templates. Sorry my dumbness. Tanks. |
December 31, 2010 Re: phobos std.container example | ||||
---|---|---|---|---|
| ||||
Posted in reply to novice2 | novice2: > 3) to search item by "name" field Do you need an associative array then? They are built-in and they don't need template syntax. > I tried to read docs with dmd2 distribution, but failed to understand. dmd2 docs are not written in a easy, they often lack examples, etc. > I never used templates. I suggest you to start experimenting with D2 templates, because they are used often in D2 code. Bye, bearophile |
December 31, 2010 Re: phobos std.container example | ||||
---|---|---|---|---|
| ||||
Posted in reply to novice2 | novice2 wrote: > Woud anybody please show phobos std.container usage sample? > I need list/array of objects/structures. SList is a singly-linked list, and Array is an array. > Every item have list/array of another objects/structures. > I need possibility: > 1) to construct such lists/arrays; Trivial. :) > 2) to enumerate items You mean iterate over the elements? > 3) to search item by "name" field You can only linear search on an SList. You can do better with Array if it's ok to sort the elements before-hand; then you can binary search. > 4) insert/remove/replace item Trivial. > I tried to read docs with dmd2 distribution, but failed to understand. You're not alone. :) An SList example: import std.stdio; import std.container; import std.algorithm; void main() { SList!int myList; foreach (i; 0 .. 10) { if (i % 2) { /* Insert at the front */ myList.insert(i); } else { /* Insert at the end */ myList.insertAfter(myList[], i); } } /* Remove the element at the front */ myList.removeFront(); /* Iterate over all of the elements */ foreach (element; myList) { writeln(element); } } Using it with user types is as simple as using your type instead of int: import std.stdio; import std.container; import std.algorithm; import std.string; struct Point { double x; double y; string toString() { return format("(%s,%s)", x, y); } } void main() { SList!Point myList; foreach (i; 0 .. 10) { if (i % 2) { /* Insert at the front */ myList.insert(Point(i, i)); } else { /* Insert at the end */ myList.insertAfter(myList[], Point(i, i)); } } /* Remove the element at the front */ myList.removeFront(); /* Iterate over all of the elements */ foreach (element; myList) { writeln(element); } } Other containers would be used similarly. Ali |
December 31, 2010 Re: phobos std.container example | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ali Çehreli | thank you Ali and bearophile! |
December 31, 2010 Re: phobos std.container example | ||||
---|---|---|---|---|
| ||||
Posted in reply to novice2 | This might be not what you want, but there is a more complete alternative to std.container which works with D2: http://www.dsource.org/projects/dcollections You may find more familiarity there. -Steve |
Copyright © 1999-2021 by the D Language Foundation