How to split a string to a 2D array
Seb
seb at wilzba.ch
Sat Feb 24 12:40:59 UTC 2018
On Saturday, 24 February 2018 at 09:06:09 UTC, Domain wrote:
> On Saturday, 24 February 2018 at 08:59:46 UTC, Domain wrote:
>> On Saturday, 24 February 2018 at 07:51:27 UTC, Domain wrote:
>>> [...]
>>
>> And why this not compile:
>>
>> rows.each!(a => data ~= a.split(",").map!(b =>
>> b.strip).padRight("", 2));
>>
>>
>> Error: cannot deduce function from argument types
>> !()(string[]), candidates are:
>> C:\D\dmd2\windows\bin\..\..\src\phobos\std\algorithm\iteration.d(899): C:\D\dmd2\windows\bin\..\..\src\phobos\std\algorithm\iteration.d(934):
>
> OK, this compile:
> rows.each!(a => data ~= a.split(",").map!(b =>
> b.strip).padRight("", 2).array);
FYI: Idiomatic D would be to avoid allocations (faster!).
An example:
```
auto html = " a,b<br/>1, 2<br/>3<br/> ";
auto rows =
html.strip.splitter("<br/>").filter!(not!empty).map!(a =>
a.splitter(","));
rows.writeln;
```
https://run.dlang.io/is/LC7Sog
If you really, really need a 2d array you can always do so if
required at the end:
```
auto arr2d = rows.map!array.array;
```
But please keep in mind that you ideally avoid the allocations in
the first place.
More information about the Digitalmars-d-learn
mailing list