`所以,我對F#非常陌生。我希望這個問題很簡單。我一直在研究和環顧四周。我有一個「不完整的結構化構造在這個表達點之前或之前」的錯誤。我覺得這可能是簡單的,或者我走了。F#查找2個數組/列表之間的缺失元素
的目標是:
有非負整數的數組。第二個數組是 ,它是通過對第一個數組的元素進行整理並刪除一個隨機元素而形成的。給定這兩個數組,找到第二個 數組中缺少哪個元素。線性搜索是不允許的。
let FindMiss list =
match list with
| [] ->
[]
|firstElem::otherElements ->
let rand = new Random
let shuffle (arr : 'a array) =
let array = Array.copy arr
let n = array.Length
for x in 1..n do
let i = n-x
let j = rand.Next(i+1)
let tmp = array.[i]
array.[i] <- array.[j]
array.[j] <- tmp
array
return array
array.[rand].delete
|array::list ->
let d=collections.defaultdict(int)
for num in list do
d[num] +=1
for num in array1 do
if d[num]==0 then return num
else d[num]-=1
printfn "The missing Number is: %A" (FindMiss[4;2;1;7;5;6;3;2])
這裏似乎有很多錯誤;有幾件事看起來比Python更Python(或者我錯過了一些新聞):'.delete'' defaultdict''返回數組'(儘管F#中的返回值也存在,但不是這樣);身份已關閉,無助於理解開始和結束的地方;它可能是很好的整個錯誤信息,並在那一點上它也被提出 – Sehnsucht
我擔心defaultdict只是python。錯誤消息是在「let shuffle(arr:'a array)=」這是第7行。我可以找到.delete的其他方法,這是我的理解,沒有返回數組中的「返回」,它會剛回來。我主要只是把「返回數組」放在那裏,看看是否能解決任何問題。但是,其餘的我仍然不確定。 – LinkHyrule
這可能是'返回數組'(不確定沒有確切的縮進我無法測試它);在F#中,你返回不需要返回的函數的最後一個表達式(就像上面的'array'一樣)。我建議你先寫兩個單獨的函數,一個用於洗牌,一個用於搜索兩個「容器」之間的「差異」。你也傾向於混合陣列和列表,你應該選擇一個並堅持下去(第一步)。 – Sehnsucht