Thread overview
Sum string lengths
May 13, 2020
Andrey
May 13, 2020
H. S. Teoh
May 13, 2020
MoonlightSentinel
May 14, 2020
Andrey
May 13, 2020
Hi,
I want to sum lengths of all strings in array:
> auto data = ["qwerty", "az", "!!!!"];

Fold and reduce doesn't work:
> auto result = data.fold!`a + b.length`(0U);

gives error:
> static assert:  "Incompatible function/seed/element: binaryFun/uint/string"

How to do it in one line?
May 13, 2020
On Wed, May 13, 2020 at 01:52:13PM +0000, Andrey via Digitalmars-d-learn wrote:
> Hi,
> I want to sum lengths of all strings in array:
> > auto data = ["qwerty", "az", "!!!!"];

data.map!(s => s.length).sum;


T

-- 
It only takes one twig to burn down a forest.
May 13, 2020
On Wednesday, 13 May 2020 at 13:52:13 UTC, Andrey wrote:
> Hi,
> I want to sum lengths of all strings in array:
>> auto data = ["qwerty", "az", "!!!!"];
>
> Fold and reduce doesn't work:
>> auto result = data.fold!`a + b.length`(0U);
>
> gives error:
>> static assert:  "Incompatible function/seed/element: binaryFun/uint/string"
>
> How to do it in one line?

The problem is that you provide a uint as seed (which determines the type of the accumulated value) but your function returns a ulong (or rather size_t).

You can fix this by changing the type of your seed, either use ulong or size_t.

auto result = data.fold!`a + b.length`(0UL);

auto result = data.fold!`a + b.length`(size_t(0));
May 14, 2020
Thanks everyone.