2
在Racket中是否有內置函數,我們可以根據值而不是值的順序來檢查兩個列表的相等性?比較Racket中的兩個列表
例如,如果比較'(1 2 2 3 4 5)和'(3 1 2 5 4),它應該返回true。
或者實現這種功能的最簡單方法是什麼?
在Racket中是否有內置函數,我們可以根據值而不是值的順序來檢查兩個列表的相等性?比較Racket中的兩個列表
例如,如果比較'(1 2 2 3 4 5)和'(3 1 2 5 4),它應該返回true。
或者實現這種功能的最簡單方法是什麼?
如果出現的次數並不重要,那麼您在做設置比較。您可以將列表轉換成集,然後比較集:
> (equal? (list->set '(1 2 3 4 5)) (list->set '(5 4 3 2 1)))
#t
如果出現的次數的確很重要,你做多集比較。一個簡單的方法來做這種常見的價值觀是排序兩個列表,然後比較他們的平等以通常的方式:
> (equal? (sort '(3 2 1 4 5) <) (sort '(2 1 3 4 5) <))
#t
> (equal? (sort '(1 2 1) <) (sort '(2 1) <))
#f
謝謝。但是這個解決方案中的問題是,如果我們的清單中有重複的內容?例如比較'(1 2 1)和'(2 1)。 – Elik
@Elik您沒有在您的問題中提及重複項,並且您的示例沒有重複項。 svk回答了你問的問題 - 並給了你兩種方法來做到這一點。你可以通過Stack Overflow搜索「[racket] remove duplicates」,並將其與他的答案結合起來。 –
@Greg Hendershott,我認爲我的問題是一個普遍的問題。 svk並沒有提到第二個解決方案,他在我的評論之後編輯了他的評論。你不必在此寫任何虛假的假設。 – Elik