www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.learn - Sum string lengths

reply Andrey <saasecondbox yandex.ru> writes:
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
next sibling parent "H. S. Teoh" <hsteoh quickfur.ath.cx> writes:
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
prev sibling parent reply MoonlightSentinel <moonlightsentinel disroot.org> writes:
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 13 2020
parent Andrey <saasecondbox yandex.ru> writes:
Thanks everyone.
May 14 2020