digitalmars.D.learn - Are there an equivalent to C#'s List in D's stdlib?
- Jack (6/6) Jan 07 2021 I coduln't find an equivalent in the documentation, I could see
- James Blachly (21/29) Jan 07 2021 Speaking for me personally, I would try to work with Ranges[0], and in a...
- Jack (8/41) Jan 07 2021 That functional approach seems really better than C#'s, which is
- Mike Parker (15/20) Jan 07 2021 See std.algorithm.mutation.remove. One overload takes an offset,
- Mike Parker (4/8) Jan 07 2021 SList and DList both have a function called linearRemoveElement.
- Jack (2/11) Jan 07 2021 seems to do the job I want, thanks
I coduln't find an equivalent in the documentation, I could see appender, Array, container etc but none of has a Remove(T item) have to write one myself or I just couldn't find? [1]: https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1.remove?view=net-5.0
Jan 07 2021
On 1/7/21 9:53 PM, Jack wrote:I coduln't find an equivalent in the documentation, I could see appender, Array, container etc but none of has a Remove(T item) method one myself or I just couldn't find? [1]: https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1 remove?view=net-5.0Speaking for me personally, I would try to work with Ranges[0], and in a functional style simply filter [1] out in the same way one calls for example: ```D-ish auto someRangeType = functionThatDoesWhatever(); auto rangeWithItemRemoved = someRangeType.filter(x => x.prop != whatever); ``` `Equals` such that the call to `Remove(new Part(){PartId=1534, PartName="cogs"});` considers only the PartId and does not match on name. Again, you could `filter(x => x.PartId != 1534)`, or you could, as in comparing, then `filter(x => x != new Part(1534, "cogs"))` Finally, although you asked about the standard library, there are many other container libraries, like emsi-containers [2] which do have List [0] http://ddili.org/ders/d.en/ranges.html [1] https://dlang.org/phobos/std_algorithm_iteration.html#filter [2] https://dlang-community.github.io/containers/index.html
Jan 07 2021
On Friday, 8 January 2021 at 03:06:24 UTC, James Blachly wrote:On 1/7/21 9:53 PM, Jack wrote:quite a memory overhead, operator overloading, etc. Quite tedius, imo. Now, if I went to use filter, could I remove that item and somewhat get an array back, without perform a new array allocation? currently i'm with this, that as far i know, does perform memory allocation by array() call: arr = arr.filter!(x => x != value).array;I coduln't find an equivalent in the documentation, I could see appender, Array, container etc but none of has a Remove(T and I do have to write one myself or I just couldn't find? [1]: https://docs.microsoft.com/en-us/dotnet/api/system.collections.generic.list-1.remove?view=net-5.0Speaking for me personally, I would try to work with Ranges[0], and in a functional style simply filter [1] out in the same way for example: ```D-ish auto someRangeType = functionThatDoesWhatever(); auto rangeWithItemRemoved = someRangeType.filter(x => x.prop != whatever); ``` overloaded `Equals` such that the call to `Remove(new Part(){PartId=1534, PartName="cogs"});` considers only the PartId and does not match on name. Again, you could `filter(x => x.PartId != 1534)`, or you could, you are comparing, then `filter(x => x != new Part(1534, "cogs"))` Finally, although you asked about the standard library, there are many other container libraries, like emsi-containers [2] which do have List types that implement a `remove` function [0] http://ddili.org/ders/d.en/ranges.html [1] https://dlang.org/phobos/std_algorithm_iteration.html#filter [2] https://dlang-community.github.io/containers/index.html
Jan 07 2021
On Friday, 8 January 2021 at 03:22:49 UTC, Jack wrote:tedius, imo. Now, if I went to use filter, could I remove that item and somewhat get an array back, without perform a new array allocation? currently i'm with this, that as far i know, does perform memory allocation by array() call: arr = arr.filter!(x => x != value).array;See std.algorithm.mutation.remove. One overload takes an offset, but the other takes a predicate. Example from the docs: ``` static immutable base = [1, 2, 3, 2, 4, 2, 5, 2]; int[] arr = base[].dup; // using a string-based predicate writeln(remove!("a == 2")(arr)); // [1, 3, 4, 5] // The original array contents have been modified, // so we need to reset it to its original state. // The length is unmodified however. arr[] = base[]; // using a lambda predicate writeln(remove!(a => a == 2)(arr)); // [1, 3, 4, 5] ```
Jan 07 2021
On Friday, 8 January 2021 at 02:53:47 UTC, Jack wrote:I coduln't find an equivalent in the documentation, I could see appender, Array, container etc but none of has a Remove(T item) do have to write one myself or I just couldn't find?SList and DList both have a function called linearRemoveElement. https://dlang.org/phobos/std_container_slist.html#.SList.linearRemoveElement https://dlang.org/phobos/std_container_dlist.html#.DList.linearRemoveElement
Jan 07 2021
On Friday, 8 January 2021 at 03:14:34 UTC, Mike Parker wrote:On Friday, 8 January 2021 at 02:53:47 UTC, Jack wrote:seems to do the job I want, thanksI coduln't find an equivalent in the documentation, I could see appender, Array, container etc but none of has a Remove(T and I do have to write one myself or I just couldn't find?SList and DList both have a function called linearRemoveElement. https://dlang.org/phobos/std_container_slist.html#.SList.linearRemoveElement https://dlang.org/phobos/std_container_dlist.html#.DList.linearRemoveElement
Jan 07 2021