[英]Increment an element in an Array in F#
这看起来非常简单和琐碎,但是今天早上我在Google上找不到任何答案。
我将几分钟内生成的C#愚蠢的代码转换为F#(这是对挑战的答案):
private static readonly int MaxAge = 131;
private static int[] Numbers = new int[MaxAge];
static void Main()
{
Random random = new Random(130);
for ( int i = 1; i < 1000000 - 1; i++) Numbers[random.Next(1,MaxAge )] += 1;
for ( int i = 1;i <= Numbers.Length - 1; i++) Console.WriteLine( "{0}: {1}", i, Numbers[i]);
Console.ReadLine();
}
在F#中,我从以下内容开始:
let r = new Random()
let numbers = Array.create 131 int
let x = for i in 1 .. 100000 do
let rn =r.Next(1,130)
numbers.[rn] <- numbers.[rn] + 1
但是,+ 1会产生我只是不太理解的错误:错误1类型'int'与类型'a-> int'不匹配
我的意图只是简单地增加在1到131之间任意给定索引处存储的值,从而模拟1到131之间的一百万个随机整数并将它们放入存储桶中。
任何人都可以在这里给我面容的时刻吗?
您在Array.create中缺少返回整数值的生成器函数。 'int'是将obj转换为int的函数值,因此您已创建函数数组。 您可以仅通过整数值来初始化数组,例如
let numbers = Array.create 131 0
创建零数组。 或者,您可以使用其他任何函数,返回int值,也可以通过以下方式在F#中生成数组:
let numbers = [|for i in 1 .. 131 -> 0|]
除了0,您还可以使用任何生成器函数,例如:
let numbers = [|for i in 1 .. 131 -> i * i|]
但是在这种情况下,最简单的方法是
Array.zeroCreate 131
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.