明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1105|回复: 6

[讨论] 如何把表lst内数据汇总

[复制链接]
发表于 2013-9-4 11:10 | 显示全部楼层 |阅读模式
本帖最后由 lisp爱好者 于 2013-9-4 11:12 编辑

请教G版、Z版、不死猫、高飞、langjs ......等等高手,如何把表lst汇总成下面的格式?
(setq lst '(( "A-1" "60" "50")("A-2" "60" "55")("A-3" "60" "50")( "A-4" "60" "50")("A-5" "60" "55")
     ("A-6" "60" "50")( "A-7" "60" "50")("A-8" "60" "45")("A-9" "60" "60")("A-10" "60" "60")))
我要的格式是下面这样的,小生这厢有礼了,望不吝赐教,拜谢。

'(( "A-1、A-3、A-4、A-6、A-7" "60" "50")("A-2、A-5" "60" "55")("A-8" "60" "45")("A-9、A-10" "60" "60"))
 楼主| 发表于 2013-9-4 11:30 | 显示全部楼层
还望大家帮忙下,谢谢,归类方式是判断小表中后两者的数据均相同时把小表中第一个数据合并
例:("A-3" "60" "50")( "A-4" "60" "50")
      判断  "60" 和 "50"都相等,那么就把"A-4"加到"A-3"表内,最终编程( "A-3、A-4" "60" "50")
 楼主| 发表于 2013-9-4 11:33 | 显示全部楼层
如果就两个表好处理,分别提出来比较,通过的话就合并修改,但是小表数量多了,找不到好方法了,烦请大侠出手相助
发表于 2013-9-4 11:44 | 显示全部楼层
  1. (defun f (l / a b)
  2.   (setq a (caar l)
  3.         b (cdar l)
  4.         l (cdr l)
  5.         )
  6.   (setq l (vl-remove-if
  7.             (function (lambda (x)
  8.                         (if (equal b (cdr x))
  9.                           (setq a (strcat a "、" (car x)))
  10.                           )
  11.                         )
  12.                       )
  13.             l
  14.             )
  15.         )
  16.   (if l
  17.     (cons (cons a b) (f l))
  18.     (list (cons a b))
  19.     )
  20.   )
  21. ;;测试
  22. (f lst)
  23. ;;返回
  24. (("A-1、A-3、A-4、A-6、A-7" "60" "50") ("A-2、A-5" "60" "55") ("A-8" "60" "45") ("A-9、A-10" "60" "60"))
发表于 2013-9-4 11:47 | 显示全部楼层
lisp爱好者 发表于 2013-9-4 11:30
还望大家帮忙下,谢谢,归类方式是判断小表中后两者的数据均相同时把小表中第一个数据合并
例:("A-3" "60 ...

杀鸡焉用牛刀
  1. (setq a        '("A-3" "60" "50") b '("A-4" "60" "50"))
  2. (defun w2 (a b)
  3.   (if (VL-EVERY '= (cdr a) (cdr b))
  4.     (append (list (car a) (car b)) (cdr a))
  5.   )
  6. )
 楼主| 发表于 2013-9-4 14:27 | 显示全部楼层
自贡黄明儒 发表于 2013-9-4 11:47
杀鸡焉用牛刀

谢谢黄兄,这样的返回正确
  1. (setq a '("A-3" "60" "50") b '("A-4" "60" "50"))
  2. (defun w2 (a b)
  3.   (if (VL-EVERY '= (cdr a) (cdr b))
  4.     (append (list (strcat (car a) "、" (car b))) (cdr a))
  5.   )
  6. )
  7. 测试:(w2 a b)
  8. 返回:("A-3、A-4" "60" "50")
 楼主| 发表于 2013-9-4 14:28 | 显示全部楼层
Gu_xl 发表于 2013-9-4 11:44

仰视 G版,多谢帮助
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-9 04:00 , Processed in 0.391175 second(s), 29 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表