Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F#:将数字数组作为字符串缩减为单个整数_F# - Fatal编程技术网

F#:将数字数组作为字符串缩减为单个整数

F#:将数字数组作为字符串缩减为单个整数,f#,F#,我有一个字符串数组,称之为a,其中每个字符串代表一个数字。我还有一个函数f:int->int->int,我想用它“将a减少为一个数字”。我想写: a |> Array.reduce (fun x y -> f (int32 x) (int32 y)) 但这不起作用,因为“reduce”类型禁止我从f返回整数(因为a是字符串数组) 有没有一种功能性的方法可以在不返回 是从f转换字符串,还是先将字符串数组转换为int数组 使用数组。首先减少映射 如果你不想调整你的f来处理字符串,你想使

我有一个字符串数组,称之为
a
,其中每个字符串代表一个数字。我还有一个函数
f:int->int->int
,我想用它“将
a
减少为一个数字”。我想写:

a |> Array.reduce (fun x y -> f (int32 x) (int32 y))
但这不起作用,因为“reduce”类型禁止我从
f
返回整数(因为
a
是字符串数组)

有没有一种功能性的方法可以在不返回 是从
f
转换字符串,还是先将字符串数组转换为int数组

使用
数组。首先减少
映射
如果你不想调整你的
f
来处理字符串,你想使用
Array.reduce
,那么是的,我想你应该首先进行转换(老实说,这似乎比用包装器lambda手动完成要容易),那么为什么不直接使用它呢

a
|> Array.map int32
|> Array.reduce f
相反

如果您关心生成中间数组的开销,您可以随时使用
Seq.
惰性地切换到
数组。

a |> Seq.map int32 |> Seq.reduce f

使用数组。折叠 除此之外,您还可以根据自己的心愿
折叠

a |> Array.fold (fun n s -> n + int32 s) 0
因此,您可以称之为更实用的;)

使用
数组。首先减少
映射
如果你不想调整你的
f
来处理字符串,你想使用
Array.reduce
,那么是的,我想你应该首先进行转换(老实说,这似乎比用包装器lambda手动完成要容易),那么为什么不直接使用它呢

a
|> Array.map int32
|> Array.reduce f
相反

如果您关心生成中间数组的开销,您可以随时使用
Seq.
惰性地切换到
数组。

a |> Seq.map int32 |> Seq.reduce f

使用数组。折叠 除此之外,您还可以根据自己的心愿
折叠

a |> Array.fold (fun n s -> n + int32 s) 0

因此,您可以称之为更实用的;)

是的,我不想首先转换整个数组。我不知道“折叠”法能做到这一点。谢谢你指出这一点。
fold
可以做任何事情(这是列表上的基本操作,因为它隐藏了列表定义)@Carsten你能详细解释一下“因为它隐藏了列表定义”是什么意思吗?@sebhofer这是lambda演算中通常使用的和-但这只是一个简单观察的聪明说法,折叠
折叠f i ls
(好的,实际上它是
列表。折叠
)保留列表的结构
ls=1::2::3::[]
不变,只是替换
[]
i
f
(作为一个箱子操作员):
折叠(+)0 ls=1+(2+(3+0))
谢谢Carsten!我需要一点时间来消化(我对函数式编程还不熟悉)…是的,我不想首先转换整个数组。我不知道“折叠”法能做到这一点。谢谢你指出这一点。
fold
可以做任何事情(这是列表上的基本操作,因为它隐藏了列表定义)@Carsten你能详细解释一下“因为它隐藏了列表定义”是什么意思吗?@sebhofer这是lambda演算中通常使用的和-但这只是一个简单观察的聪明说法,折叠
折叠f i ls
(好的,实际上它是
列表。折叠
)保留列表的结构
ls=1::2::3::[]
不变,只是替换
[]
i
f
(作为一个箱子操作员):
折叠(+)0 ls=1+(2+(3+0))
谢谢Carsten!我需要一点时间来消化这一点(我是函数式编程新手)。。。