在F#中增加数组中的元素

时间:2014-10-29 12:01:21

标签: arrays 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 - &gt;类型不匹配INT'

我的目的只是在任意给定索引上随机增加1到131之间的值,从而模拟1到131之间的一百万个随机整数并将它们放入桶中。

有人能在这里给我提供facepalm时刻吗?

1 个答案:

答案 0 :(得分:2)

您在Array.create中缺少返回整数值的生成器函数。 &#39; INT&#39;是一个将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