2014-10-29 97 views
1

這看起來會非常簡單和微不足道,但我今天早上在Google上找不到任何答案。在F中增加一個數組中的元素#

我將我在短短几分鐘到F#(這是一個答案的一個挑戰)生產的C#這個傻位:

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型「詮釋」不匹配的類型'一 - >詮釋」

我的目的很簡單,就是在將在任意給定索引處存儲的值隨機地放在1和131之間,從而模擬1和131之間的一百萬個隨機整數並將它們放入桶中。

任何人都可以在這裏爲我提供facepalm時刻嗎?

回答

2

您在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 
+0

謝謝,這解決了我的問題! – 2014-11-07 06:26:47

相關問題