www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - How can I use UFCS for a loop

reply Tim <tim.oliver tutanota.com> writes:
Hi all,

How can I change the following to a more D-like approach by using 
UFCS?

double[3] result;
Json json = res.readJson;
for(int i = 0; i < json.length; i++){
     result[i] = json[i].to!double;
}
I'd prefer to do something like:
result = res.readJson[].map!(to!double);
Jan 25
next sibling parent Q. Schroll <qs.il.paperinik gmail.com> writes:
On Tuesday, 26 January 2021 at 00:47:09 UTC, Tim wrote:
 Hi all,

 How can I change the following to a more D-like approach by 
 using UFCS?

double[3] result;
Json json = res.readJson;
for(int i = 0; i < json.length; i++){
     result[i] = json[i].to!double;
}
I'd prefer to do something like:
result = res.readJson[].map!(to!double);
Use std.array.array (alias: std.range.array) to make the range returned my map!(to!double) into an array. Note that the result of map isn't actually evaluated until it is iterated. std.array.array will iterate and collect. https://dlang.org/phobos/std_array.html#array result = res.readJson[].map!(to!double).array; should work perfectly.
Jan 25
prev sibling parent reply Q. Schroll <qs.il.paperinik gmail.com> writes:
On Tuesday, 26 January 2021 at 00:47:09 UTC, Tim wrote:
 Hi all,

 How can I change the following to a more D-like approach by 
 using UFCS?

double[3] result;
Unless you have a good reason, use a slice and not a static array: double[] result; The result of std.array.array will be a slice anyway.
Jan 25
parent reply Tim <tim.oliver tutanota.com> writes:
On Tuesday, 26 January 2021 at 01:38:45 UTC, Q. Schroll wrote:
 On Tuesday, 26 January 2021 at 00:47:09 UTC, Tim wrote:
 Hi all,

 How can I change the following to a more D-like approach by 
 using UFCS?

double[3] result;
Unless you have a good reason, use a slice and not a static array: double[] result; The result of std.array.array will be a slice anyway.
Why would I need to use a slice instead of a static array? I'm using a static array in this instance because I have and underlying 3d vector with double[3] as its base type
Jan 25
parent Jesse Phillips <Jesse.K.Phillips+D gmail.com> writes:
On Tuesday, 26 January 2021 at 02:19:10 UTC, Tim wrote:
 On Tuesday, 26 January 2021 at 01:38:45 UTC, Q. Schroll wrote:
 On Tuesday, 26 January 2021 at 00:47:09 UTC, Tim wrote:
 Hi all,

 How can I change the following to a more D-like approach by 
 using UFCS?

double[3] result;
Unless you have a good reason, use a slice and not a static array: double[] result; The result of std.array.array will be a slice anyway.
Why would I need to use a slice instead of a static array? I'm using a static array in this instance because I have and underlying 3d vector with double[3] as its base type
In that case, maybe this untested code double[3] result; res.readJson[].map!(to!double).copy(result[]);
Jan 25