请教表处理问题,合并子表
(setq list1 '(("水泥路" "15.80平方米" "" "" "" "厚度为1m") ("水泥路" "22.00平方米" "" "" "" "无厚度")("水泥路" "62.00平方米" "" "" "" "无厚度")("水泥路" "100.00平方米" "" "" "" "无厚度")
("女儿墙" "6.85平方米" "8.05米" "0.85米" "0.12米" "有顶")("女儿墙" "22.00平方米" "8.05米" "0.85米" "0.12米" "有顶")))
;子表的0、3、4、5相同,则2相加返回新表list2
(setq list2 '(("水泥路" "15.80平方米" "" "" "" "厚度为1m") ("水泥路" "84.00平方米" "" "" "" "无厚度")
("女儿墙" "28.85平方米" "8.05米" "0.85米" "0.12米" "有顶")))
谢谢各位!
本帖最后由 vitalgg 于 2021-3-5 23:55 编辑
第二个元素没有用算法提取单位,均按 平方米 考虑。
(setq list1 '(("水泥路" "15.80平方米" "" "" "" "厚度为1m")
("水泥路" "22.00平方米" "" "" "" "无厚度")
("水泥路" "62.00平方米" "" "" "" "无厚度")
("水泥路" "100.00平方米" "" "" "" "无厚度")
("女儿墙" "6.85平方米" "8.05米" "0.85米" "0.12米" "有顶")
("女儿墙" "22.00平方米" "8.05米" "0.85米" "0.12米" "有顶")))
(defun union-lst (list1 / list2)
(setq list2 '())
(foreach x% list1
(if (member (cons (car x%) (cdddr x%))(mapcar '(lambda (x) (cons (car x) (cdddr x)))list2))
(progn
(foreach at% list2
(if (equal (cons (car x%) (cdddr x%))
(cons (car at%) (cdddr at%)))
(progn
(setq list2 (subst (append (list (car x%)
(strcat (rtos (+ (atof (nth 1 x%)) (atof (nth 1 at%))) 2 2) "平方米")
(nth 2 x%))
(cdddr x%))
at%
list2)))
)
))
(progn
(setq list2 (append list2 (list x%)))))
)
list2
)
(print (union-lst list1))
(princ)
要做两个工作:
1.搜索。
2.数据再整理。
用cons来组织数据,再用assoc可能会方便点。 vitalgg 发表于 2021-3-5 23:51
第二个元素没有用算法提取单位,均按 平方米 考虑。
太感谢你了!!!我慢慢再学习下 etoxp 发表于 2021-3-5 22:58
要做两个工作:
1.搜索。
2.数据再整理。
谢谢,我也要学着。。。。 谢谢,我也要学着。。。。
页:
[1]