llsheng_73 发表于 2022-9-19 16:49:08

本帖最后由 llsheng_73 于 2022-9-19 17:17 编辑

masterlong 发表于 2022-9-19 15:34
73兄的代码看着费劲
执行效率比我的高


(setq aa (nth id a))
(setq bb (nth id b))
a,b都是被排序的表内的元素,放在这里处理意味着除首尾两个元素外,每一个元素会这样处理两次,因为第一次的b,下一次它会变成a
sortn里边提前对每一个元素进行了这样的处理
(mapcar'(lambda(x)(mapcar'(lambda(y)(nth y x))sorts))l)

另外,根据你的函数里边的思路,增加了容差,并修改为只排序指定的列,因为你这个更适用

masterlong 发表于 2022-9-19 19:40:26

是的
因为确实太费劲
开始没仔细看你的代码

你的处理方式很棒
根据优先级别先重置了多维点表和funs
这样后面的实际比较的过程中
只需要car和cdr
比nth要快很多

masterlong 发表于 2022-9-19 20:16:04

啊啊啊
影响速度的最主要因素不是nth
而是我写代码习惯用【'】来代替lambda
刚改成lambda又测试了一下
速度和73兄之前的那个版本几乎没有区别
多的一点点时间
是因为本身代码多一个fuzz的判断

不过73兄先重置的处理方式
应该还是有效果的
毕竟现在测试的多维表
子表长度都比较短
一旦很长的话就能体现出来了

小菜123 发表于 2022-9-19 21:03:24

lambda前要用function,不要用',编译后速度上还会更快

masterlong 发表于 2022-9-19 22:08:26

不就是图省事想少打几个字母么
没想到影响这么大

magicheno 发表于 2022-9-20 11:01:16

感谢大佬分享~

zj20190405 发表于 2023-8-21 20:32:59

masterlong 发表于 2022-9-19 14:32


谢谢大哥,用你这个函数,放回的表正确
页: 1 [2]
查看完整版本: N维表排序及自定义顺序