如何对包含子列表的列表进行排序

发布于 2024-09-30 06:55:17 字数 312 浏览 2 评论 0原文

对颜色列表进行排序。

如果两种颜色的红色值相同,则绿色值较小的颜色在排序中首先出现。如果两种颜色具有相同的红色和绿色值,则蓝色值较小的颜色在排序中首先出现。

示例:让颜色列表为

((72 75 0) (0 0 10) (255 255 255) (0 10 10) (0 10 8)(50 100 255))

然后程序将返回

((0 0 10) (0 10 8) (0 10 10) (50 100 255) (72 75 0) (255 255 255))

Sorting a list of Colors.

If two colors’ red values are the same, then the one with smaller green value appears first in the ordering. If two colors have the same red and green value, then the one with smaller blue value appears first in the ordering.

Example: let the color list be

((72 75 0) (0 0 10) (255 255 255) (0 10 10) (0 10 8)(50 100 255))

Then the procedure would return

((0 0 10) (0 10 8) (0 10 10) (50 100 255) (72 75 0) (255 255 255))

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

朮生 2024-10-07 06:55:17

您应该为排序编写一个自定义比较器:

(define color-comparator
  (lambda (c1 c2)
    (cond
      ((not (= (car c1) (car c2))) (< (car c1) (car c2)))     ; red
      ((not (= (cadr c1) (cadr c2))) (< (cadr c1) (cadr c2))) ; green
      (else (< (caddr c1) (caddr c2))))))                     ; blue

然后您可以将此函数传递给 sort 过程。

诡计:

(sort
  '((72 75 0) (0 0 10) (255 255 255) (0 10 10) (0 10 8)(50 100 255))
  color-comparator)

Chez计划:

(sort
  color-comparator
  '((72 75 0) (0 0 10) (255 255 255) (0 10 10) (0 10 8)(50 100 255)))

You should write a custom comparator for sort:

(define color-comparator
  (lambda (c1 c2)
    (cond
      ((not (= (car c1) (car c2))) (< (car c1) (car c2)))     ; red
      ((not (= (cadr c1) (cadr c2))) (< (cadr c1) (cadr c2))) ; green
      (else (< (caddr c1) (caddr c2))))))                     ; blue

Then you can just pass this function to the sort procedure.

Guile:

(sort
  '((72 75 0) (0 0 10) (255 255 255) (0 10 10) (0 10 8)(50 100 255))
  color-comparator)

Chez Scheme:

(sort
  color-comparator
  '((72 75 0) (0 0 10) (255 255 255) (0 10 10) (0 10 8)(50 100 255)))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文