EDA365电子工程师网

标题: [求助] 请问有没有类似sortcar的sortcadr函数??? [打印本页]

作者: 361553894    时间: 2015-11-2 15:25
标题: [求助] 请问有没有类似sortcar的sortcadr函数???
List = list(list("a" "e" "c") list("a" "c" "d") list("c" "c" "d") list("b" "e" "f"))
按照sortcar排序后,List是
list(list("a" "e" "c") list("a" "c" "d") list("b" "e" "f") list("c" "c" "d"))
我需要的是根据car排序后,再根据cadr排序,但是不能改变sortcar的前提,也就是
list(list("a" "c" "d") list("a" "e" "c") list("b" "e" "f") list("c" "c" "d"))
请问应该如何实现sortcadr这个功能?

作者: XYX365    时间: 2015-11-2 17:07
本帖最后由 XYX365 于 2015-11-2 17:08 编辑

可以試試下列函數看看

List = sort(List 'fnSortCadr)
  1. procedure(fnSortCadr(list1 list2)
  2.                         let((y1 y2 result)
  3.                                 y1 = cadr(list1)
  4.                                 y2 = cadr(list2)
  5.                                 if(y1 < y2 then
  6.                                         result = t
  7.                                 else
  8.                                         result = nil
  9.                                 )
  10.                                 result
  11.                         )
  12.                 )
复制代码


作者: 361553894    时间: 2015-11-2 17:18
XYX365 发表于 2015-11-2 17:07
可以試試下列函數看看

List = sort(List 'fnSortCadr)

tmpList = sortcar(tmpList 'axlStrcmpAlpNum)
我目前用的排序是这种
但是会有一个特殊情况,car的内容是一样的,所以还要继续比较cadr的内容
在比较cadr内容的时候,car排序的前提不能改变
而不是直接根据cadr排序

作者: 361553894    时间: 2015-11-2 17:19
XYX365 发表于 2015-11-2 17:07
可以試試下列函數看看

List = sort(List 'fnSortCadr)

而且所有元素都是字母和数字结合的,所以不能直接用 < > 来比较
作者: XYX365    时间: 2015-11-2 17:42
361553894 发表于 2015-11-2 17:19
而且所有元素都是字母和数字结合的,所以不能直接用 < > 来比较

<> 可以改成 axlStrcmpAlpNum() 再判斷就好
下面是axlStrcmpAlpNum()的輸出結果

Value Returned
0 The two strings are equal.
+num If t_str1 is greater than t_str2 (1 goes after 2)
nil If t_str1 is less than t_str2 (1 goes before 2)




作者: 361553894    时间: 2015-11-3 08:30
XYX365 发表于 2015-11-2 17:42
可以改成 axlStrcmpAlpNum() 再判斷就好
下面是axlStrcmpAlpNum()的輸出結果

我懂了,也就是可以模仿你的
fnSortCadr函数结构
输出result,sort会根据result的值对list进行排序

作者: 361553894    时间: 2015-11-3 09:13
本帖最后由 361553894 于 2015-11-3 09:17 编辑
XYX365 发表于 2015-11-2 17:42
可以改成 axlStrcmpAlpNum() 再判斷就好
下面是axlStrcmpAlpNum()的輸出結果


是pdf有问题么??
我测试出来的结果跟这个不一样的
str1<str2返回的是t
str1>str2返回的是nil
str1=str2返回的也是nil


作者: 361553894    时间: 2015-11-3 09:57
  1. procedure( AlphaNum2Sort(list1 list2)
  2.         let((x1 x2 y1 y2 result)
  3.                 x1 = car(list1)
  4.                 x2 = car(list2)
  5.                 y1 = cadr(list1)
  6.                 y2 = cadr(list2)
  7.                 if(axlStrcmpAlpNum(x1 x2) then
  8.                         result = t
  9.                 else
  10.                         if(x1 == x2 && axlStrcmpAlpNum(y1 y2) then
  11.                                 result = t
  12.                         else
  13.                                 result = nil
  14.                         )
  15.                 )
  16.                 result
  17.         )
  18. )
复制代码

目前暂时用这个解决问题了
作者: Projectaker    时间: 2016-1-5 18:10
支持一下,赞一下楼主




欢迎光临 EDA365电子工程师网 (https://bbs.elecnest.cn/) Powered by Discuz! X3.2