【发布时间】:2015-11-11 11:01:14
【问题描述】:
我有list-of-cars,一个car 类型的结构列表,其中包含字段“制造商”、“模型”和“年份”。使用常规 Racket sort 功能,我可以按一键排序(例如“制造商”)。但是我怎样才能同时按制造商和型号进行排序,并得出一个等于示例中输出的sort-by-maker-and-model 的列表?
这不是学校作业,我试图用数据做一个比我需要处理的实际数据更无聊的例子。昂贵的汽车对我来说似乎并不太无聊。
享受我狡猾的例子吧!祝你有美好的一天!
#lang racket/base
(define-struct car (maker model year) #:transparent)
(define list-of-cars (list (car "Ferrari" "250 Europa GT" "1954")
(car "Bugatti" "Type 2" "1900")
(car "Lamborghini" "Flying Star II" "1966")
(car "Bugatti" "Type 10" "1908")
(car "Ferrari" "166 Inter" "1949")
(car "Bugatti" "Type 5" "1903")
(car "Maserati" "A6 1500" "1946")
(car "Ferrari" "340 America" "1951")
(car "Maserati" "5000 GT" "1959")
(car "Maserati" "Quattroporte" "1963")
(car "Lamborghini" "Egoista" "2013")))
(define (sort-by-maker lst)
(sort lst
string<?
#:key car-maker))
(sort-by-maker list-of-cars)
; =>
(list
(car "Bugatti" "Type 2" "1900")
(car "Bugatti" "Type 10" "1908")
(car "Bugatti" "Type 5" "1903")
(car "Ferrari" "250 Europa GT" "1954")
(car "Ferrari" "166 Inter" "1949")
(car "Ferrari" "340 America" "1951")
(car "Lamborghini" "Flying Star II" "1966")
(car "Lamborghini" "Egoista" "2013")
(car "Maserati" "A6 1500" "1946")
(car "Maserati" "5000 GT" "1959")
(car "Maserati" "Quattroporte" "1963"))
(define (sort-by-maker-and-model lst)
; ???
#f)
(sort-by-maker-and-model list-of-cars)
; =>
(list
(car "Bugatti" "Type 2" "1900")
(car "Bugatti" "Type 5" "1903")
(car "Bugatti" "Type 10" "1908")
(car "Ferrari" "166 Inter" "1949")
(car "Ferrari" "250 Europa GT" "1954")
(car "Ferrari" "340 America" "1951")
(car "Lamborghini" "Egoista" "2013")
(car "Lamborghini" "Flying Star II" "1966")
(car "Maserati" "5000 GT" "1959")
(car "Maserati" "A6 1500" "1946")
(car "Maserati" "Quattroporte" "1963"))
【问题讨论】:
-
经过一些喃喃自语,在这个例子中使用
car作为结构名称是一个糟糕的想法......即使它工作它重新定义了该语言的正常汽车功能。但无论如何......
标签: sorting struct scheme racket