On Thursday, 12 April 2018 at 15:47:14 UTC, Uknown wrote:
On Thursday, 12 April 2018 at 15:38:34 UTC, Chris Katko wrote:
I googled but couldn't find any clear solution.

I've got a 2-D array of strings read from a text file I parsed. So it's like

0 1 15 0 0
2 12 1 0 0
...
0 1 0 10 0

They come in with spaces, so I join into an array between them. But then the last ones have a newline \n on the end, which explodes the to! type conversion.

If it was a single array, I could simply do:

string [25] test;

  test.each((ref n) => n.stripRight());

But how do you do that when it's a 2-D array?

I'm looking not just for this case, but the generate case of iterating / applying filters to 2-D arrays.

Thanks.

I think something like this would work:

test.each((ref s) => s.each((ref n) => n.stripRight()));

Essentially, get each 1D array from the 2D array, and then apply the algorithms on that. There's probably a better way though

But each doesn't return anything, it mutates, right? I think that's the problem I ran into with my attempt. With your code, I get an error about void:

  string []x = split(file.readln.idup, " ");
  x.each((ref s) => s.each((ref n) => n.stripRight()));

extra.d(2493): Error: template std.algorithm.iteration.each cannot deduce function from argument types !()(string[], void), candidates are: /usr/include/dmd/phobos/std/algorithm/iteration.d(864): std.algorithm.iteration.each(alias pred = "a")

extra.d(2499): Error: template std.algorithm.mutation.stripRight cannot deduce function from argument types !()(string), candidates are: /usr/include/dmd/phobos/std/algorithm/mutation.d(2363): std.algorithm.mutation.stripRight(Range, E)(Range range, E element) if (isBidirectionalRange!Range && is(typeof(range.back == element) : bool)) /usr/include/dmd/phobos/std/algorithm/mutation.d(2375): std.algorithm.mutation.stripRight(alias pred, Range)(Range range) if (isBidirectionalRange!Range && is(typeof(pred(range.back)) : bool))

extra.d(2500): Error: template std.algorithm.mutation.stripRight cannot deduce function from argument types !()(string), candidates are: /usr/include/dmd/phobos/std/algorithm/mutation.d(2363): std.algorithm.mutation.stripRight(Range, E)(Range range, E element) if (isBidirectionalRange!Range && is(typeof(range.back == element) : bool)) /usr/include/dmd/phobos/std/algorithm/mutation.d(2375): std.algorithm.mutation.stripRight(alias pred, Range)(Range range) if (isBidirectionalRange!Range && is(typeof(pred(range.back)) : bool))

Reply via email to