XDrxAPI 37 个LIST 处理函数帮助手册
1.
函数名: xdrx-list->csv
功能说明:
将AutoLISP字符串列表数据导出为CSV/TSV格式文件
支持自定义列分隔符,自动处理特殊字符
调用格式:
(xdrx-list->csv <文件路径> <字符串列表> [分隔符])
参数说明:
<文件路径>- 字符串,输出文件完整路径(如"C:/data.csv")
<字符串列表> - 要导出的字符串列表(如'("列1","列2","列3"))
[分隔符] - 可选,列分隔符(默认为",",支持"\t"等特殊字符)
返回值:
成功 - 返回生成的CSV文件路径(字符串)
失败 - 返回nil
注意事项:
1. 仅处理字符串类型(RTSTR)元素
2. 文件路径需包含扩展名(.csv/.tsv等)
3. 特殊分隔符需转义(如制表符使用"\t")
4. 同名文件会被自动覆盖
使用示例:
(xdrx-list->csv "C:/test.csv" '("ID","Name","Age"))
(xdrx-list->csv "C:/data.csv" '("1","张三","25") ";")
(xdrx-list->csv "C:/data.tsv" '("A","B","C") "\t")
2.
函数名: xdrx-list->flatten
功能说明:
将嵌套列表展平为一维列表
支持选择是否递归展平所有层级
调用格式:
(xdrx-list->flatten [选项] <列表>)
参数说明:
[选项] - 可选参数,指定展平方式:
T/nil 表示是否完全递归展平
(默认为nil,仅展平一级)
<列表> - 要处理的嵌套列表
返回值:
成功 - 返回展平后的新列表
失败 - 返回nil
注意事项:
1. 不修改原始列表,返回新列表
2. 当选项为T时,递归展平所有层级
3. 当选项为nil时,仅展平一级嵌套
4. 处理各种嵌套组合情况
使用示例:
(xdrx-list->flatten '(1 (2 3) (4 (5 6))))
返回: (1 2 3 4 (5 6))
(xdrx-list->flatten T '(1 (2 3) (4 (5 6))))
返回: (1 2 3 4 5 6)
(xdrx-list->flatten nil '((1 2) (3 (4 (5)))))
返回: (1 2 3 (4 (5)))
------------------------------------------------------------
3.
函数名: xdrx-list-append
功能说明:
将多个列表或元素合并为一个新列表
支持嵌套列表的合并操作
调用格式:
(xdrx-list-append <列表1> <列表2> ...)
参数说明:
<列表1> - 第一个列表或元素
<列表2> - 第二个列表或元素
... - 可接受多个列表/元素参数
返回值:
返回合并后的新列表
注意事项:
1. 不修改原始列表,返回新列表
2. 支持混合合并列表和原子元素
3. 完全递归处理嵌套列表结构
4. 保留原始列表的元素顺序
使用示例:
(xdrx-list-append '(1 2) '(3 4))
返回: (1 2 3 4)
(xdrx-list-append 'a '(b c))
返回: (a b c)
(xdrx-list-append '(1 (2)) '((3) 4))
返回: (1 (2) (3) 4)
(xdrx-list-append '(1 2) nil '(3 4))
返回: (1 2 3 4)
------------------------------------------------------------
4.
函数名: xdrx-list-assoc
功能说明:
在关联列表中查找指定键对应的值
支持多键查找和连续查找功能
调用格式:
(xdrx-list-assoc <键列表> <关联列表> )
参数说明:
<键列表> - 要查找的键(可以是整数、点或列表)
<关联列表> - 要搜索的关联列表
- 可选参数,启用连续查找模式
返回值:
返回找到的所有键值对列表
未找到时返回nil
注意事项:
1. 支持多种键类型:
- 整数(RTSHORT)
- 二维点(RTPOINT)
- 三维点(RT3DPOINT)
2. 启用连续查找模式(T)时:
- 会记住上次查找位置
- 下次从该位置后继续查找
3. 对于点类型键:
- 会分别查找X,Y(,Z)坐标值
- 返回所有匹配结果
使用示例:
(xdrx-list-assoc 2 '((1 "A") (2 "B") (3 "C")))
返回: (2 "B")
(xdrx-list-assoc '(2 3) '((1 "A") (2 "B") (3 "C")))
返回: ((2 "B") (3 "C"))
(xdrx-list-assoc '(5 2) '((1 "A") (2 "B") (2 "C") (3 "D"))
返回: ((2 "B") (2 "C"))
(xdrx-list-assoc '(1 2) '((1 "A") (2 "B") (3 "C")) T)
返回: ((1 "A") (2 "B"))
------------------------------------------------------------
5.
函数名: xdrx-list-assoc-append
功能说明:
在关联列表中查找指定键,并将新值追加到该键的现有值后
若键不存在则不执行任何操作
调用格式:
(xdrx-list-assoc-append <键值对> <关联列表>)
参数说明:
<键值对> - 要查找和追加的键及其值(格式: (键 . 值))
<关联列表> - 要修改的关联列表
返回值:
返回修改后的关联列表
若键不存在则返回原列表
注意事项:
1. 仅当键存在时才执行追加操作
2. 直接修改原始关联列表
3. 键值对必须为点对格式(键 . 值)
4. 新值将追加到原值列表的末尾
5. 支持嵌套关联列表结构
使用示例:
(xdrx-list-assoc-append '(1 . "A") '((1 "X") (2 "Y")))
返回: ((1 "X" "A") (2 "Y"))
(xdrx-list-assoc-append '(2 . "B") '((1 "A") (2 "X")))
返回: ((1 "A") (2 "X" "B"))
(xdrx-list-assoc-append '(3 . "C") '((1 "A") (2 "B")))
返回: ((1 "A") (2 "B"))
; 键3不存在,不执行追加
(xdrx-list-assoc-append '(1 . "D") '((1 ("X" "Y")) (2 "Z")))
返回: ((1 ("X" "Y" "D")) (2 "Z"))
------------------------------------------------------------
6.
函数名: xdrx-list-assoc-put
功能说明:
在关联列表中更新或添加键值对
若键存在则替换其值,不存在则添加到列表开头
调用格式:
(xdrx-list-assoc-put <键值对> <关联列表>)
参数说明:
<键值对> - 要插入或更新的键及其值(格式: (键 . 值) 或 (键 值))
<关联列表> - 要操作的关联列表
返回值:
返回修改后的关联列表
注意事项:
1. 直接修改原始关联列表
2. 键存在时: 完全替换原有值
3. 键不存在时: 将新键值对添加到列表开头
4. 自动处理键值对的括号格式
5. 支持各种类型的键和值
使用示例:
(xdrx-list-assoc-put '(1 . "A") '((1 "X") (2 "Y")))
返回: ((1 "A") (2 "Y"))
(xdrx-list-assoc-put '(3 "C") '((1 "A") (2 "B")))
返回: ((3 "C") (1 "A") (2 "B"))
(xdrx-list-assoc-put '(2 . ("X" "Y")) '((1 "A") (2 "B")))
返回: ((1 "A") (2 "X" "Y"))
(xdrx-list-assoc-put '(4 . 10) '((1 . 5) (2 . 8)))
返回: ((4 . 10) (1 . 5) (2 . 8))
------------------------------------------------------------
7.
[ xdrx-list-assoc-remove 函数帮助 ]
函数名: xdrx-list-assoc-remove
功能说明:
从关联列表中移除指定的键及其关联值
若键不存在则列表保持不变
调用格式:
(xdrx-list-assoc-remove <键> <关联列表>)
参数说明:
<键> - 要移除的键(支持各种类型)
<关联列表> - 要操作的关联列表
返回值:
返回修改后的关联列表
若键不存在则返回原列表
注意事项:
1. 直接修改原始关联列表
2. 仅移除第一个匹配的键值对
3. 键不存在时不执行任何操作
4. 保持列表中其他元素的顺序不变
5. 支持各种类型的键值对
使用示例:
(xdrx-list-assoc-remove 1 '((1 "A") (2 "B") (3 "C")))
返回: ((2 "B") (3 "C"))
(xdrx-list-assoc-remove "X" '(("X" 100) ("Y" 200) ("X" 300)))
返回: (("Y" 200) ("X" 300))
(xdrx-list-assoc-remove 5 '((1 "A") (2 "B")))
返回: ((1 "A") (2 "B"))
; 键5不存在,列表不变
(xdrx-list-assoc-remove '(1 2) '(((1 2) "A") ((3 4) "B")))
返回: (((3 4) "B"))
------------------------------------------------------------
8.
函数名: xdrx-list-diff
功能说明:
计算两个列表的差集
返回在第一个列表中出现但不在第二个列表中的元素
调用格式:
(xdrx-list-diff <列表1> <列表2>)
参数说明:
<列表1> - 源列表(从中找出差异元素)
<列表2> - 对比列表
返回值:
返回包含所有差异元素的新列表
(即存在于列表1但不在列表2中的元素)
注意事项:
1. 不修改原始列表,返回新列表
2. 保持元素在列表1中的原始顺序
3. 对于重复元素,只保留第一个出现的
4. 使用相等比较(equal)判断元素是否相同
5. 支持嵌套列表的比较
使用示例:
(xdrx-list-diff '(1 2 3 4) '(3 4 5 6))
返回: (1 2)
(xdrx-list-diff '("A" "B" "C") '("B" "D"))
返回: ("A" "C")
(xdrx-list-diff '((1 2) (3 4)) '((3 4)))
返回: ((1 2))
(xdrx-list-diff '(1 2 2 3) '(2 4))
返回: (1 3)
------------------------------------------------------------
9.
[*]函数名:
xdrx-list-find
调用格式:
(xdrx-list-find 元素 列表 )
参数说明:
元素 - 要查找的元素值
列表 - 要搜索的列表
- 可选参数,启用连续查找模式
返回值:
找到则返回元素索引(从0开始)
未找到返回nil
注意事项:
1. 使用相等比较(equal)判断元素是否匹配
2. 默认从列表开头开始查找
3. 启用连续查找模式(T)时:
- 会记住上次查找位置
- 下次从该位置后继续查找
4. 支持各种类型的元素查找
5. 返回第一个匹配项的索引
使用示例:
(xdrx-list-find "A" '("X" "A" "B" "A"))
返回: 1
(xdrx-list-find 3 '(1 2 3 4 3 5))
返回: 2
(xdrx-list-find '(1 2) '((3 4) (1 2) (5 6)))
返回: 1
(xdrx-list-find "A" '("X" "Y" "Z"))
返回: nil
------------------------------------------------------------
10.
函数名: xdrx-list-group
功能说明:
将列表中的元素按相似性分组
支持数值、点和自定义容差分组
调用格式:
(xdrx-list-group <列表> [容差])
参数说明:
<列表> - 要分组的列表(可包含数值、点或混合元素)
[容差] - 可选,分组判定容差值(默认为当前捕捉容差)
返回值:
返回分组后的嵌套列表
每组元素作为子列表
注意事项:
1. 数值分组: 按容差值判断是否属于同一组
2. 点分组: 分别比较X/Y/Z坐标
3. 混合元素: 不同类型不会分到同一组
4. 支持二维点(RTPOINT)和三维点(RT3DPOINT)
5. 保持原始元素顺序
使用示例:
(xdrx-list-group '(1.0 1.1 2.0 2.05 3.0) 0.2)
返回: ((1.0 1.1) (2.0 2.05) (3.0))
(xdrx-list-group '((1 2) (1.1 2.1) (3 4)))
返回: (((1 2) (1.1 2.1)) ((3 4)))
(xdrx-list-group '(1 "A" 2 "B" 1.1))
返回: ((1 1.1) ("A") (2) ("B"))
(xdrx-list-group '(1 2 3))
返回: ((1) (2) (3)) ; 默认容差为0
------------------------------------------------------------
11.
函数名: xdrx-list-group-by-assoc
函数别名:xdrx-list-groupbyindex
功能说明:
根据关联列表的首元素进行分组
将具有相同首元素的关联项合并到同一组
调用格式:
(xdrx-list-group-by-assoc <关联列表> [容差])
参数说明:
<关联列表> - 要分组的关联列表(元素格式为(键 . 值))
[容差] - 可选,数值键分组时的容差值(默认为当前捕捉容差)
返回值:
返回分组后的嵌套列表
每组形式为(键 值1 值2 ...)
注意事项:
1. 按关联项的首元素(键)进行分组
2. 数值键可使用容差进行模糊分组
3. 非数值键需完全匹配才会分到同一组
4. 保持原始键值对的顺序
5. 返回的组中第一个元素为键,后续为所有匹配的值
使用示例:
(xdrx-list-group-by-assoc '((1 . "A") (1 . "B") (2 . "C") (1.1 . "D"))
返回: ((1 "A" "B" "D") (2 "C"))
(xdrx-list-group-by-assoc '(("X" . 10) ("Y" . 20) ("X" . 30)))
返回: (("X" 10 30) ("Y" 20))
(xdrx-list-group-by-assoc '((1.0 . "A") (1.2 . "B") (2.0 . "C"))
返回: ((1.0 "A" "B") (2.0 "C"))
(xdrx-list-group-by-assoc '((1 . "A") (2 . "B") (3 . "C"))
返回: ((1 "A") (2 "B") (3 "C"))
------------------------------------------------------------
12.
函数名: xdrx-list-insert
功能说明:
在列表的指定位置插入元素
支持在任意有效位置插入新元素
调用格式:
(xdrx-list-insert <列表> <位置> <元素>)
参数说明:
<列表> - 要操作的原始列表
<位置> - 插入位置的索引(从0开始)
<元素> - 要插入的元素值
返回值:
返回插入元素后的新列表
注意事项:
1. 不修改原始列表,返回新列表
2. 位置索引从0开始计数
3. 支持在列表开头(0)、中间和末尾插入
4. 如果位置超出范围,会自动调整到最近的有效位置
5. 支持插入各种类型的元素(包括嵌套列表)
使用示例:
(xdrx-list-insert '(a b c) 1 'x)
返回: (a x b c)
(xdrx-list-insert '("A" "B" "C") 0 "X")
返回: ("X" "A" "B" "C")
(xdrx-list-insert '(1 2 3) 5 4)
返回: (1 2 3 4) ; 位置超出自动追加
(xdrx-list-insert '((1 2) (3 4)) 1 '(2.5))
返回: ((1 2) (2.5) (3 4))
------------------------------------------------------------
13.
函数名: xdrx-list-intersect
功能说明:
计算两个列表的交集
返回同时存在于两个列表中的元素
调用格式:
(xdrx-list-intersect <列表1> <列表2>)
参数说明:
<列表1> - 第一个输入列表
<列表2> - 第二个输入列表
返回值:
返回包含所有共有元素的新列表
(元素同时存在于两个输入列表中)
注意事项:
1. 不修改原始列表,返回新列表
2. 保留元素在第一个列表中的出现顺序
3. 对于重复元素,只保留第一个出现的
4. 使用相等比较(equal)判断元素是否相同
5. 支持嵌套列表的比较
6. 如果无共同元素,返回空列表
使用示例:
(xdrx-list-intersect '(1 2 3 4) '(3 4 5 6))
返回: (3 4)
(xdrx-list-intersect '("A" "B" "C") '("B" "C" "D"))
返回: ("B" "C")
(xdrx-list-intersect '((1 2) (3 4)) '((5 6) (3 4)))
返回: ((3 4))
(xdrx-list-intersect '(1 2 3) '(4 5 6))
返回: nil
------------------------------------------------------------
14.
函数名: xdrx-list-is-assoc
功能说明:
判断一个列表是否为有效的关联列表
调用格式:
(xdrx-list-is-assoc <列表>)
参数说明:
<列表> - 要检查的列表
返回值:
如果是关联列表返回 T
否则返回 nil
注意事项:
1. 严格检查每个元素是否为点对(cons cell)
2. 空列表被视为有效关联列表
3. 支持嵌套关联列表的检查
使用示例:
(xdrx-list-is-assoc '((1 . "A") (2 . "B")))
返回: T
(xdrx-list-is-assoc '((1 2) (3 4)))
返回: T
(xdrx-list-is-assoc '(()))
返回: T
------------------------------------------------------------
15.
[ xdrx-list-is-dotted-pair 函数帮助 ]
函数名: xdrx-list-is-dotted-pair
功能说明:
判断一个列表是否为点对(dotted pair)结构
即检查列表是否为(元素1 . 元素2)的形式
调用格式:
(xdrx-list-is-dotted-pair <列表>)
参数说明:
<列表> - 要检查的列表或表达式
返回值:
如果是点对结构返回 T
否则返回 nil
注意事项:
1. 严格检查是否为标准的点对结构
2. 常规列表(如(1 2 3))不被视为点对
3. 仅接受两个元素用点连接的结构
4. 支持检查嵌套的点对结构
使用示例:
(xdrx-list-is-dotted-pair '(1 . 2))
返回: T
(xdrx-list-is-dotted-pair '(1 2))
返回: nil
(xdrx-list-is-dotted-pair '((a . b) . (c . d)))
返回: T
(xdrx-list-is-dotted-pair 'a)
返回: nil
------------------------------------------------------------
16.
[ xdrx-list-loadeddll 函数帮助 ]
函数名: xdrx-list-loadeddll
功能说明:
获取当前进程已加载的所有DLL模块列表
可选项包含完整路径或仅文件名
调用格式:
(xdrx-list-loadeddll )
参数说明:
- 可选参数,指定返回结果是否包含完整路径
T: 返回完整路径
无参数: 仅返回DLL文件名
返回值:
返回已加载DLL模块的字符串列表
按字母顺序排序
注意事项:
1. 返回列表已按字母顺序排序
2. 包含所有已加载的DLL模块
3. 不包含EXE主模块
4. 在AutoCAD环境中会包含ARX模块
5. 结果可能因加载顺序不同而有所差异
使用示例:
(xdrx-list-loadeddll)
返回: ("acad.exe" "xdrx.dll" "xdrx_api.arx")
(xdrx-list-loadeddll T)
返回: ("C:\\AutoCAD\\acad.exe"
"C:\\Program Files\\XDSoft\\xdrx.dll"
"C:\\Program Files\\XDSoft\\xdrx_api.arx")
------------------------------------------------------------
17.
函数名: xdrx-list-m-assoc
功能说明:
根据指定的键在关联列表中查找
返回与指定键匹配的元素
调用格式:
(xdrx-list-m-assoc <关联列表> <键>)
参数说明:
<关联列表> - 要查找的关联列表(元素格式为 (键 . 值))
<键> - 用于查找的键
返回值:
返回包含所有与指定键匹配的元素的新列表
返回的列表中是与提供的键匹配的所有元素
注意事项:
1. 函数根据提供的键在关联列表中进行查找
2. 返回值将包含所有键与提供的键匹配的元素
3. 键和值的比较使用相等性检查
4. 如果没有找到匹配的元素,返回空列表
5. 关联列表应以 (键 . 值) 的格式提供,查找是基于键的
使用示例:
(xdrx-list-m-assoc '((1 . "A") (1 . "B") (2 . "C") (1 . "D")) 1)
返回: ("A" "B" "D")
(xdrx-list-m-assoc '((1 . "A") (2 . "B") (3 . "C")) 2)
返回: ("B")
(xdrx-list-m-assoc '((1 . "X") (2 . "Y") (3 . "Z")) 4)
返回: nil
------------------------------------------------------------
18.
函数名: xdrx-list-member
功能说明:
检查元素是否为列表的成员
可返回从该元素开始的剩余列表
调用格式:
(xdrx-list-member <元素> <列表> )
参数说明:
<元素> - 要查找的值
<列表> - 要搜索的列表
- 可选参数,启用连续查找模式
返回值:
如果找到则返回从该元素开始的剩余列表
否则返回 nil
注意事项:
1. 使用相等比较(equal)判断成员关系
2. 默认从列表开头开始查找
3. 启用连续查找模式(T)时:
- 会记住上次查找位置
- 下次从该位置后继续查找
4. 支持各种Lisp数据类型的查找
5. 返回的是原列表的尾部(从匹配点开始)
使用示例:
(xdrx-list-member 2 '(1 2 3 4))
返回: (2 3 4)
(xdrx-list-member "B" '("A" "B" "C"))
返回: ("B" "C")
(xdrx-list-member '(1 2) '((3 4) (1 2) (5 6)))
返回: ((1 2) (5 6))
(xdrx-list-member 5 '(1 2 3))
返回: nil
------------------------------------------------------------
19.
函数名: xdrx-list-nth++
功能说明:
从列表中提取子列表
从指定起始位置开始,提取指定数量的连续元素
调用格式:
(xdrx-list-nth++ <列表> <起始索引> <元素数量>)
参数说明:
<列表> - 要操作的原始列表
<起始索引> - 起始提取位置,从0开始计数
<元素数量> - 要提取的元素个数
返回值:
返回一个新的子列表,包含指定范围内的元素
注意事项:
1. 不修改原始列表,返回新列表
2. 索引从0开始
3. 如果起始索引超出范围,返回空列表
4. 如果元素数量超过剩余长度,仅返回实际可提取的部分
5. 起始索引和元素数量必须为整数类型(short 或 long)
使用示例:
(xdrx-list-nth++ '(a b c d e) 1 3)
返回: (b c d)
(xdrx-list-nth++ '(1 2 3 4 5) 2 10)
返回: (3 4 5)
(xdrx-list-nth++ '("A" "B" "C") 0 2)
返回: ("A" "B")
------------------------------------------------------------
20.
函数名: xdrx-list-nth--
功能说明:
从列表中提取子列表
以指定索引为基准,**向前提取**指定数量的连续元素(不包含该索引位置的元素)
调用格式:
(xdrx-list-nth-- <列表> <索引位置> <元素数量>)
参数说明:
<列表> - 要操作的原始列表
<索引位置> - 提取的参考位置(从此位置**之前**开始提取)
<元素数量> - 要向前提取的元素个数
返回值:
返回一个新的子列表,包含从指定位置之前向前提取的若干元素
注意事项:
1. 不修改原始列表,返回新列表
2. 索引从 0 开始计数
3. **提取结果不包括索引位置本身的元素**
4. 若索引为 0 或提取数量小于 1,则返回空列表
5. 若提取数量超过起始位置,则返回从列表头部起的所有可用元素
6. 索引与数量必须为整数(RTLONG 或 RTSHORT)
使用示例:
(xdrx-list-nth-- '(a b c d e) 3 2)
返回: (b c); 提取的是 index 1 和 2 的元素(不包括 index 3)
(xdrx-list-nth-- '(1 2 3 4 5) 1 3)
返回: (1); index 1 前只有一个元素
(xdrx-list-nth-- '("A" "B" "C") 0 2)
返回: nil; index 0 没有前面的元素
------------------------------------------------------------
21.
[*]函数名:xdrx-list-nth0, xdrx-list-nth1, ..., xdrx-list-nth9
功能说明:
返回列表中的指定索引的元素。
调用格式:
(xdrx-list-nth0 <列表>)
(xdrx-list-nth1 <列表>)
...
(xdrx-list-nth9 <列表>)
参数说明:
<列表> - 要获取指定索引元素的列表
返回值:
返回列表中指定索引的元素;若输入列表为空或非法,或列表元素不足对应索引,则返回 nil
注意事项:
列表必须是一个合法的 LISP 列表
如果列表为空或元素不足指定索引,则返回 nil
索引为 0 到 9,表示获取从第一个到第十个元素
返回值是元素本身,不嵌套在列表中
使用示例:
(xdrx-list-nth0 '(a b c d))
返回:a
(xdrx-list-nth1 '(1 2 3))
返回:2
(xdrx-list-nth2 '(a b c))
返回:c
(xdrx-list-nth9 '(a b c))
返回:nil
------------------------------------------------------------
22.
[*]函数名:xdrx-list-put-nth
功能说明:
将列表中指定索引位置的元素替换为新元素。
调用格式:
(xdrx-list-put-nth <列表> <索引> <新元素>)
参数说明:
<列表> - 要操作的 LISP 列表
<索引> - 要替换的元素的索引位置(整数类型)
<新元素> - 要插入的新元素,类型与原列表元素一致,替换指定索引位置的原元素
返回值:
返回替换后的列表,原指定位置的元素将被新元素替代。
注意事项:
1. 列表必须是合法的 LISP 列表,元素类型需要与原元素类型匹配。
2. 索引值必须是整数类型。
3. 函数会替换列表中指定索引位置的元素。
4. 索引位置越界的行为未定义。
使用示例:
(xdrx-list-put-nth '(1 2 3 4) 2 9)
返回:'(1 2 9 4)
(xdrx-list-put-nth '("a" "b" "c" "d") 1 "z")
返回:'("a" "z" "c" "d")
(xdrx-list-put-nth '(10.5 20.5 30.5 40.5) 3 99.9)
返回:'(10.5 20.5 30.5 99.9)
------------------------------------------------------------
23.
[*]函数名:xdrx-list-quicksort
功能说明:
对列表中的元素进行快速排序。
调用格式:
(xdrx-list-quicksort <列表>)
参数说明:
<列表> - 要排序的 LISP 列表。列表中的元素可以是不同类型(例如整数、实数、点等)。
返回值:
返回排序后的列表。排序规则依赖于列表中的元素类型。
注意事项:
1. 列表必须是合法的 LISP 列表,元素类型可以为整数、实数、点、3D点等。
2. 列表中的元素会根据其类型进行排序,具体排序行为取决于元素类型。
3. 当列表中只有一个元素时,不进行排序,直接返回该元素。
4. 如果输入的列表是空的,函数不会进行任何操作。
使用示例:
(xdrx-list-quicksort '(4 3 2 1))
返回:'(1 2 3 4)
(xdrx-list-quicksort '(1 2 3 4))
返回:'(1 2 3 4)
(xdrx-list-quicksort '((1 2) (3 4) (2 3)))
返回:'((1 2) (2 3) (3 4))
(xdrx-list-quicksort '((10 20 30) (5 15 25) (20 30 40)))
返回:'((5 15 25) (10 20 30) (20 30 40))
------------------------------------------------------------
24.
[*]函数名:xdrx-list-remove
功能说明:
从第一个列表(<列表1>)中删除在第二个列表(<列表2>)中出现的元素,并返回删除后的新列表。
调用格式:
(xdrx-list-remove <列表1> <列表2>)
参数说明:
<列表1> - 被操作的列表,其中包含需要从中删除的元素。
<列表2> - 包含要删除元素的列表,`<列表1>` 中在 `<列表2>` 中出现的元素将被删除。
返回值:
返回一个新列表,它是从 `<列表1>` 中删除了 `<列表2>` 中所有匹配元素后的结果。
注意事项:
1. 删除操作会遍历 `<列表1>` 中的每个元素,并在 `<列表2>` 中删除其匹配的元素。
2. 如果 `<列表1>` 中的某个元素不在 `<列表2>` 中,则该元素将保留在 `<列表1>` 中。
3. 如果 `<列表1>` 或 `<列表2>` 为空,则不执行任何删除操作,原 `<列表1>` 保持不变。
4. 删除后的列表会按原顺序返回,没有重复元素。
使用示例:
(xdrx-list-remove '(1 2 3 4 5) '(1 2 3))
返回:'(4 5)
(xdrx-list-remove '("a" "b" "c" "d") '("a" "b"))
返回:'("c" "d")
(xdrx-list-remove '(2 3 4)'(1 2))
返回:'(1)
------------------------------------------------------------
25.
[*]函数名:xdrx_list_remove_adjacent_dups
功能说明:
从列表中移除相邻的重复元素,返回去重后的新列表。
调用格式:
(xdrx-list-remove-adjacent-dups <列表>)
参数说明:
<列表> - 需要去除相邻重复元素的列表。
返回值:
返回一个新列表,其中已删除相邻的重复元素。
注意事项:
1. 该操作会遍历列表中的元素,如果两个相邻的元素相等,则删除后者。
2. 如果列表为空或只包含一个元素,则不会做任何更改。
3. 操作只影响相邻的重复元素,不会删除非相邻的相同元素。
使用示例:
(xdrx-list-remove-adjacent-dups '(1 1 2 2 3 3 3))
返回:'(1 2 3)
(xdrx-list-remove-adjacent-dups '("a" "a" "b" "b" "c" "a"))
返回:'("a" "b" "c" "a")
(xdrx-list-remove-adjacent-dups '(1 2 3 4))
返回:'(1 2 3 4)
------------------------------------------------------------
26.
[*]函数名:xdrx_list_remove_duplicates
功能说明:
从列表中移除所有重复的元素,返回一个新列表,其中仅包含唯一的元素。
调用格式:
(xdrx-list-remove-duplicates <列表> [<距离容忍值>] [<慢模式标志>])
参数说明:
<列表> - 要去重的列表,其中可能包含重复元素。
[<距离容忍值>] - 可选参数,指定去重时使用的距离容忍值。当给定时,元素之间的距离小于此值时会认为是重复元素。
[<慢模式标志>] - 可选参数,指定是否启用慢模式。在慢模式下,使用不同的算法处理重复元素的去除。
返回值:
返回一个新列表,其中去除了所有重复元素,且列表元素按原顺序排列。
注意事项:
1. 如果列表中的元素在物理上接近(根据指定的容忍值),它们会被认为是重复的并被移除。
2. 若未指定距离容忍值,则会根据默认的去重逻辑进行处理。
3. 慢模式通过使用不同的去重算法进行处理,可能效率较低,但适用于一些特殊场景。
4. 慢模式使用的是逐一比较的方式,它会依次检查列表中的每个元素,确认元素是否已经出现过。如果元素已经出现过,则认为是重复的并将其删除。这种方法的时间复杂度较高,尤其是在列表长度较长时。
5. 正常模式则通过哈希表来处理去重,使用不同的哈希类型(如内容、节点、键或指针哈希)来更高效地检测重复元素。正常模式的效率较高,尤其适用于列表较大的情况。
使用示例:
(xdrx-list-remove-duplicates '(1 1 2 3 3 4))
返回:'(1 2 3 4)
(xdrx-list-remove-duplicates '("a" "b" "b" "a" "c"))
返回:'("a" "b" "c")
(xdrx-list-remove-duplicates '(1 2 2 3 4 5) 0.5)
返回:'(1 2 3 4 5)
------------------------------------------------------------
27.
[*]函数名:xdrx-list-remove-first
功能说明:
从给定的列表中删除第一个出现的指定元素,并返回删除后的新列表。
调用格式:
(xdrx-list-remove-first <元素> <列表>)
参数说明:
<元素> - 需要删除的元素,删除列表中第一次出现的该元素。
<列表> - 被操作的列表,其中包含需要删除的元素。
返回值:
返回一个新列表,删除了第一个出现的指定元素后的结果。
注意事项:
1. 删除操作会遍历列表并删除第一次出现的指定元素。
2. 如果列表中没有找到该元素,列表保持不变。
3. 返回的新列表中不包含被删除的元素,且其他元素顺序保持不变。
4. 只会删除第一个匹配的元素,而不会删除所有匹配的元素。
使用示例:
(xdrx-list-remove-first 2 '(1 2 3 4))
返回:'(1 3 4)
(xdrx-list-remove-first "b" '("a" "b" "c" "d"))
返回:'("a" "c" "d")
(xdrx-list-remove-first 2 '(1 2 3 2))
返回:'(1 3 2)
------------------------------------------------------------
28.
[*]函数名:xdrx-list-remove-last
功能说明:
从给定的列表中删除最后一个元素,并返回删除后的新列表。
调用格式:
(xdrx-list-remove-last <列表>)
参数说明:
<列表> - 被操作的列表,包含要删除最后一个元素的列表。
返回值:
返回一个新列表,删除了最后一个元素后的结果。
注意事项:
1. 删除操作会遍历列表并删除最后一个元素。
2. 如果列表为空,则不会进行任何操作。
3. 返回的新列表中不包含被删除的元素,且其他元素顺序保持不变。
使用示例:
(xdrx-list-remove-last '(1 2 3 4))
返回:'(1 2 3)
(xdrx-list-remove-last '("a" "b" "c" "d"))
返回:'("a" "b" "c")
(xdrx-list-remove-last '(5 6 7 8 9))
返回:'(5 6 7 8)
------------------------------------------------------------
29.
[*]函数名:xdrx-list-remove-nth
功能说明:
删除列表中指定索引位置的元素,返回删除后的新列表。
调用格式:
(xdrx-list-remove-nth <索引> <列表>)
参数说明:
<索引> - 要删除的元素在列表中的位置(从 0 开始计数)。
<列表> - 被操作的目标列表。
返回值:
返回一个删除指定位置元素后的新列表。
注意事项:
1. 索引从 0 开始,(xdrx-list-remove-nth 0 '(a b c)) 会删除第一个元素。
2. 如果索引越界,函数不会进行任何修改,原样返回。
3. 如果列表为空或参数无效,不会进行任何操作。
4. 支持混合类型列表(整数、字符串等)。
使用示例:
(xdrx-list-remove-nth 0 '("x" "y" "z"))
返回:'("y" "z")
(xdrx-list-remove-nth 10 '(1 2 3))
返回:'(1 2 3) ; 索引超出范围,不做修改
------------------------------------------------------------
30.
[*]函数名:xdrx-list-sort
功能说明:
对列表中的元素进行排序,并返回排序后的新列表。
调用格式:
(xdrx-list-sort <列表>)
(xdrx-list-sort <列表> <容差>)
参数说明:
<列表>- 要排序的目标列表,支持数字或可比较的字符串。
<容差>- (可选)排序时的数值比较容差,仅对浮点数有效。
返回值:
返回一个升序排列的新列表,原列表不改变。
注意事项:
1. 支持数字列表和字符串列表的排序。
2. 当输入为点(2D或3D)时,将其转换为数值列表进行排序。
3. 如果输入不是列表或列表长度 <= 1,将原样返回。
4. 容差参数用于浮点数比较中判断近似相等。
使用示例:
(xdrx-list-sort '(4 1 3 2))
返回:'(1 2 3 4)
(xdrx-list-sort '("dog" "apple" "cat"))
返回:'("apple" "cat" "dog")
(xdrx-list-sort '(1.01 1.001 1.0011) 0.01)
返回:'(1.001 1.01) ; 根据容差去重后排序
(xdrx-list-sort '(3.5 2.1 5.9))
返回:'(2.1 3.5 5.9)
(xdrx-list-sort '(1 2))
返回:'(1 2)
------------------------------------------------------------
31.
[*]函数名:xdrx-list-split
功能说明:
根据指定的分隔元素将列表拆分为两个子列表。
调用格式:
(xdrx-list-split <列表> <分隔符>)
(xdrx-list-split <列表> <分隔符> )
参数说明:
<列表> - 要拆分的目标列表。
<分隔符> - 拆分的标志元素,第一次出现该元素将作为拆分点。
- (可选)若传入字符串 "T",并且 <分隔符> 是点类型(如2D/3D点),则将其转换为数值列表后再进行匹配。
返回值:
一个包含两个子列表的列表:分隔符之前的部分和之后的部分(不包含分隔符本身)。
注意事项:
1. 只在第一次匹配到分隔符处进行拆分。
2. 如果列表中未找到分隔符,则返回原列表和空列表。
3. 若启用 T 参数,点坐标如 (1.0 2.0) 会被转换为 (1.0 2.0) 列表匹配。
使用示例:
(xdrx-list-split '(1 2 3 4 5) 3)
返回:'((1 2) (4 5))
(xdrx-list-split '(a b c d) 'b)
返回:'((a) (c d))
(xdrx-list-split '((1.0 2.0) (3.0 4.0) (5.0 6.0)) (3.0 4.0) "T")
返回:'(((1.0 2.0)) ((5.0 6.0)))
(xdrx-list-split '(1 2 3) 5)
返回:'((1 2 3) ())
------------------------------------------------------------
32.
[*]函数名:xdrx-list-subst-nth
功能说明:
替换列表中指定位置的元素为新值。
调用格式:
(xdrx-list-subst-nth <列表> <索引> <新值>)
参数说明:
<列表> - 目标列表。
<索引> - 整数值,从 0 开始的索引,表示要替换的位置。
<新值> - 替换该位置的新元素。
返回值:
返回一个新的列表,该列表与原始列表相同,只是指定索引处的元素被新值替换。
注意事项:
1. 如果索引越界,则返回空列表。
2. 索引值必须是整数类型(short 或 long)。
3. 此操作不会修改原始列表,而是返回一个新列表。
使用示例:
(xdrx-list-subst-nth '(a b c d) 2 'x)
返回:'(a b x d)
(xdrx-list-subst-nth '(1 2 3 4) 0 99)
返回:'(99 2 3 4)
(xdrx-list-subst-nth '(1 2 3) 5 8)
返回:'()
------------------------------------------------------------
33.
[*]函数名:xdrx-list-subtract
功能说明:
从一个原始列表中移除出现在另一个排除列表中的所有元素。
调用格式:
(xdrx-list-subtract <排除列表> <原始列表>)
参数说明:
<排除列表> - 要从原始列表中排除的元素集合。
<原始列表> - 被处理的目标列表。
返回值:
返回一个新列表,包含所有未被排除的元素(保留原始顺序)。
注意事项:
1. 比较使用元素的值,相等则会被移除。
2. 保持原始列表中的元素顺序不变。
3. 返回的新列表不会修改原始输入列表。
使用示例:
(xdrx-list-subtract '(2 4 6) '(1 2 3 4 5))
返回:'(1 3 5)
------------------------------------------------------------
34.
[*]函数名:xdrx-list-subtract-item
功能说明:
从指定的列表中移除所有等于某个指定项(如点、值)的元素。
调用格式:
(xdrx-list-subtract-item <原始列表> <要移除的项>)
参数说明:
<原始列表> - 要处理的列表。
<要移除的项> - 要从列表中移除的元素,可以是普通值,也可以是点(如(1.0 2.0 3.0))。
返回值:
返回一个新列表,排除所有与指定项相等的元素。
注意事项:
1. 比较是值相等比较(点元素可转换为列表进行逐项比较)。
2. 返回的新列表不会修改原始输入列表。
使用示例:
(xdrx-list-subtract-item '((1.0 2.0 3.0) (4.0 5.0 6.0) (1.0 2.0 3.0)) '(1.0 2.0 3.0))
返回:'((4.0 5.0 6.0))
(xdrx-list-subtract-item '(1 2 3 4 2 5) 2)
返回:'(1 3 4 5)
------------------------------------------------------------
35.
[*]函数名:xdrx-list-swap
功能说明:
交换列表中两个指定索引处的元素。
调用格式:
(xdrx-list-swap <列表> <索引1> <索引2>)
参数说明:
<列表> - 目标列表。
<索引1>- 第一个元素的索引(从0开始)。
<索引2>- 第二个元素的索引(从0开始)。
返回值:
返回一个新列表,交换了两个元素的位置。
注意事项:
1. 若任一索引超出范围,函数将不会执行交换操作。
2. 只能交换原子类型的节点,不支持嵌套resbuf链。
使用示例:
(xdrx-list-swap '(a b c d) 1 3)
返回:'(a d c b)
(xdrx-list-swap '(1 2 3 4 5) 0 4)
返回:'(5 2 3 4 1)
------------------------------------------------------------
36.
[*]函数名:xdrx-list-to-ss
功能说明:
将实体列表(由实体名组成)转换为选择集(Selection Set)。
本函数是 `xdrx-ss-to-list` 的反操作。
调用格式:
(xdrx-list-to-ss <实体名列表>)
参数说明:
<实体名列表> - 一个由实体名 (ename) 组成的列表,通常来源于 `xdrx-ss-to-list`。
返回值:
返回对应的选择集,可用于图形操作函数,如 `sslength`、`ssname` 等。
注意事项:
1. 列表中的元素必须是有效的实体名(ename),否则将被忽略。
2. 只处理 `ename` 类型的数据。
使用示例:
(setq ss (xdrx-list-to-ss (xdrx-ss-to-list (ssget))))
返回值:选择集 ss,包含原始选择集中的所有对象。
------------------------------------------------------------
37.
[*]函数名:xdrx-list-union
功能说明:
返回两个列表的并集,自动去除重复项。
调用格式:
(xdrx-list-union <列表1> <列表2>)
参数说明:
<列表1> - 第一个列表。
<列表2> - 第二个列表。
返回值:
一个新的列表,包含列表1和列表2的所有唯一元素。
注意事项:
1. 列表元素可以是任意Lisp数据(整数、字符串、点、实体名等)。
2. 自动去重,重复元素只保留一个。
使用示例:
(xdrx-list-union '(1 2 3) '(3 4 5))
返回值:'(1 2 3 4 5)
------------------------------------------------------------
页:
[1]