Tôi đang sử dụng Sinh viên trung cấp với Lambda trong DrRacket, tôi đã tự hỏi làm thế nào để loại bỏ các bản sao trong danh sách, trong khi vẫn giữ thứ tự. Ví dụ: (remove-dup (list 2 5 4 5 1 2))
sẽ sản xuất (list 2 5 4 1)
. Cho đến nay, tôi có điều này:Làm thế nào để loại bỏ các bản sao trong danh sách, nhưng giữ thứ tự
(define (remove-duplicates lst)
(cond
[(empty? lst) empty]
[(member? (first lst) (rest lst))
(remove-duplicates (rest lst))]
[else (cons (first lst) (remove-duplicates (rest lst)))]))
, nhưng có vấn đề vì nó không giữ được thứ tự. Ai đó có thể chỉ cho tôi đi đúng hướng? Cảm ơn vì đã dành thời gian cho tôi.
Thực ra, có vẻ như * không * giữ nguyên thứ tự, không giữ nguyên phần tử trùng lặp đầu tiên. Bạn có chắc chắn rằng giải pháp của bạn không chính xác? –
tiếc là giải pháp không chính xác. Ví dụ, nếu tôi có loại bỏ trùng lặp (1 2 5 1 4), tôi muốn (danh sách 1 2 5 4), thay vì giá trị thực tế của (danh sách 2 5 1 4). Xin lỗi cho ví dụ xấu. –
Tôi đã nghĩ đến việc làm một cái gì đó như chống lại 1 của danh sách, và sau đó sử dụng bộ lọc trên phần còn lại của danh sách với số 1. Ngoại trừ, tôi không biết làm thế nào để thực hiện điều đó haha. –