我試圖用此功能刪除列表中的重複項。它刪除重複項,但以相反順序返回列表。我有點不確定如何解決這個問題,而不是一個醜陋的解決方案。F#刪除重複
Q
F#刪除重複
3
A
回答
2
1
這不是真的清楚,我多少幫助(或缺乏)您需要從解決方案中的標準庫函數中獲得。
最簡單的方法是隻使用List.distinct
List.distinct [1;1;2;4;4;5;6];; val it : int list = [1; 2; 4; 5; 6]
你可以使用foldBack
let distinct lst =
List.foldBack (fun v lst' ->
if List.contains v lst' then lst'
else v::lst') lst []
這產生相同的結果做一個版本:
distinct [1;1;2;4;4;5;6];; val it : int list = [1; 2; 4; 5; 6]
如果你想使自己的foldBack
太...
let rec foldBack f lst z =
match lst with
|[] -> z
|x::xs -> f x (foldBack f xs z)
注意到,我儘量不寫一個大功能,做一切和我,而不是試圖建立從一個解決方案一系列可重用組件 - 這是在使用功能語言時進入的好習慣。
3
已經有其他的答案顯示出各種實際的解決方案,但我想你只需要做一些微小的改動就可以使你的代碼工作。當函數式編程使用蓄電池,你往往最終逆轉沿途的名單 - 標準的解決方案,這是在最後,你可以使用List.rev
做扭轉名單:
let rd list=
let rec func list nlist=
match list with
| [] -> List.rev nlist // Reverse the list before returning it
| x::xs ->
if not (isMember x nlist) then
func xs (x::nlist)
else
func xs nlist
func list []
從加入List.rev
除了,我還將最後一行更改爲func list []
(您的代碼在那裏有add
,但這可能是一個錯字)。我也將isMember x nlist <> true
更改爲更通俗的not (isMember x nlist)
。
+1
可以更加習慣於顛倒'if'和'else'塊並放下'not' – Sehnsucht
相關問題
- 1. 刪除重複
- 2. 刪除重複
- 3. 刪除「重複」
- 4. 刪除重複
- 5. 重複刪除
- 6. 刪除重複
- 7. 刪除重複
- 8. 刪除重複
- 9. 刪除重複
- 10. 刪除重複
- 11. F#使用函數從列表中刪除重複項
- 12. 刪除重複JOIN
- 13. 刪除重複值
- 14. 刪除重複/從
- 15. 刪除重複行
- 16. 刪除重複項
- 17. 刪除重複行
- 18. 刪除重複表
- 19. XSLT刪除重複
- 20. 刪除重複2000
- 21. Python重複刪除
- 22. 刪除重複行
- 23. 刪除重複項
- 24. 刪除重複值
- 25. ArrayList重複刪除
- 26. 刪除重複行(不要刪除所有重複)
- 27. 刪除Python中的重複項Pandas DataFrame不刪除重複項
- 28. Python重複數據刪除記錄 - 重複數據刪除
- 29. 刪除重複方法不會刪除重複項
- 30. 刪除重複數據刪除 -
使用'foldback'? –
不知道那是什麼。 – alexanderson
'removeDuplicates'中的內部lambda應該被命名爲'func'或'add',但沿代碼保持不變;那就是說,你只需要使用'List.rev'或者寫你自己的方法來反轉結果列表。 – Sehnsucht