XDSoft 发表于 2025-5-14 21:35:58

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]
查看完整版本: XDrxAPI 37 个LIST 处理函数帮助手册