如果值相等,如何使用二次排序对列表进行排序?
How to sort a list with a secondary sort if the values are equal?
我想按字母顺序对列表进行排序。如果字符串相同,则按数字递增排序。
(define players(list (list "Arnold" 66 )
(list "Butter" 77 )
(list "Nutter" 18 )
(list "Butter" 5 )
(list "Nutter" 2 )
(list "Butter" 1 )))
(sort players (lambda (a b) (string<? (first a)(first b))) )
(check-expect (sort players
(lambda (a b) (string<? (first a)(first b))) )
(list (list "Arnold" 66 )
(list "Butter" 77 )
(list "Butter" 5 )
(list "Butter" 1 )
(list "Nutter" 18 )
(list "Nutter" 2 )))
目前我可以按字母顺序排序,但是当字符串相同时,我不知道如何按递增的顺序排序。如何在不使用递归的情况下对其进行排序?我只能使用抽象列表函数和 lambda。
您可以使用以下作为排序函数:
(λ (a b)
(if (string=? (first a) (first b))
(< (second a) (second b))
(string<? (first a) (first b))))
本质上,如果字符串相同,则检查数字(第二个位置)。否则,如果字符串不同,请使用与之前相同的操作。
我想按字母顺序对列表进行排序。如果字符串相同,则按数字递增排序。
(define players(list (list "Arnold" 66 )
(list "Butter" 77 )
(list "Nutter" 18 )
(list "Butter" 5 )
(list "Nutter" 2 )
(list "Butter" 1 )))
(sort players (lambda (a b) (string<? (first a)(first b))) )
(check-expect (sort players
(lambda (a b) (string<? (first a)(first b))) )
(list (list "Arnold" 66 )
(list "Butter" 77 )
(list "Butter" 5 )
(list "Butter" 1 )
(list "Nutter" 18 )
(list "Nutter" 2 )))
目前我可以按字母顺序排序,但是当字符串相同时,我不知道如何按递增的顺序排序。如何在不使用递归的情况下对其进行排序?我只能使用抽象列表函数和 lambda。
您可以使用以下作为排序函数:
(λ (a b)
(if (string=? (first a) (first b))
(< (second a) (second b))
(string<? (first a) (first b))))
本质上,如果字符串相同,则检查数字(第二个位置)。否则,如果字符串不同,请使用与之前相同的操作。