繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM