Thread overview | |||||||
---|---|---|---|---|---|---|---|
|
July 04, 2015 Switching rows with columns | ||||
---|---|---|---|---|
| ||||
I have a range of ranges and need to change it so the elements are column-aligned instead of row-aligned. For example, [[1, 2, 3], [4, 5, 6], [7, 8, 9]] would change into [[1, 4, 7], [2, 5, 8], [3, 6, 0]]. Can I even do this with ranges, and if so, how? |
July 04, 2015 Re: Switching rows with columns | ||||
---|---|---|---|---|
| ||||
Posted in reply to Tanel Tagaväli | On Saturday, 4 July 2015 at 15:28:56 UTC, Tanel Tagaväli wrote: > I have a range of ranges and need to change it so the elements are column-aligned instead of row-aligned. > > For example, > [[1, 2, 3], > [4, 5, 6], > [7, 8, 9]] > would change into > [[1, 4, 7], > [2, 5, 8], > [3, 6, 0]]. > > Can I even do this with ranges, and if so, how? Try std.range.transposed: http://dlang.org/phobos/std_range.html#.transposed |
July 05, 2015 Re: Switching rows with columns | ||||
---|---|---|---|---|
| ||||
Posted in reply to Marc Schütz | On Saturday, 4 July 2015 at 16:29:44 UTC, Marc Schütz wrote:
> Try std.range.transposed:
> http://dlang.org/phobos/std_range.html#.transposed
Does this work with user-defined types?
I defined two structs that implement the InputRange(possibly ForwardRange) interface, an integer range and a range of those integer ranges.
DMD tells me the "transposed" template cannot deduce function from the arguments, which is a range of integer ranges.
The template does, however, work on a two-dimensional array.
The "save" method is implemented using a simple "return this", could this be to blame?
|
July 05, 2015 Re: Switching rows with columns | ||||
---|---|---|---|---|
| ||||
Posted in reply to Tanel Tagaväli | On Sunday, 5 July 2015 at 00:18:18 UTC, Tanel Tagaväli wrote: > On Saturday, 4 July 2015 at 16:29:44 UTC, Marc Schütz wrote: >> Try std.range.transposed: >> http://dlang.org/phobos/std_range.html#.transposed > > Does this work with user-defined types? > > I defined two structs that implement the InputRange(possibly ForwardRange) interface, an integer range and a range of those integer ranges. > > DMD tells me the "transposed" template cannot deduce function from the arguments, which is a range of integer ranges. > The template does, however, work on a two-dimensional array. > > The "save" method is implemented using a simple "return this", could this be to blame? This should be fine. Which of the ranges is the ForwardRange? It should be the range-of-ranges. You can check which of the template constraints fails: import std.range; alias RangeOfRanges = typeof(myRangeOfRanges); pragma(msg, isForwardRange!RangeOfRanges); pragma(msg, isInputRange!(ElementType!RangeOfRanges)); pragma(msg, hasAssignableElements!RangeOfRanges); Maybe it's the last condition, `hasAssignableElements`. I don't know whether that one is really necessary... |
July 05, 2015 Re: Switching rows with columns | ||||
---|---|---|---|---|
| ||||
Posted in reply to Marc Schütz | On Sunday, 5 July 2015 at 11:35:14 UTC, Marc Schütz wrote:
> Maybe it's the last condition, `hasAssignableElements`. I don't know whether that one is really necessary...
It probably is. The last check returned false.
Since I already would have to implement "r.front = ", I'll just use arrays.
Thanks for the help.
|
Copyright © 1999-2021 by the D Language Foundation