帮助:解析函数/arraydiff
{{#arraydiff: 结果数组名 | 数组1 | 数组2 | ... | 数组N }}
- 官方文档:Extension:Arrays
arraydiff
计算数组的差集,从第一个数组中移除所有出现在其它数组中的元素,并将结果存入新数组。出自扩展 Arrays BWIKI和各大Wiki平台广泛使用此扩展。<br>在遥远的未来,它可能与Mediawiki新的并行解析器不兼容,请参阅扩展主页了解更多信息。。
比如有数组 a=[1,2,3,4]、b=[2,4],执行 {{#arraydiff:result|a|b}} 会得到 result=[1,3]。
差集运算常用于数据过滤场景,如去除已处理元素、排除指定项等操作。
语法
{{#arraydiff: 结果数组名 | 数组1 | 数组2 | ... | 数组N }}
参数
- 结果数组名
- 用于存储结果的数组名称(区分大小写)
- 数组1
- 被减数组,作为差集运算的基准数组
- 数组2 ... 数组N
- 减数组,这些数组中的元素将从数组1中移除
- 支持多个减数组,按参数顺序依次执行差集运算
效果
- 输出:不输出任何字符
- 效果:创建或更新指定名称的结果数组,包含差集运算后的元素。运算逻辑为依次从第一个数组中移除所有出现在后续数组中的元素(数学表示:[math]\displaystyle{ A - B - C - \ldots }[/math])。结果数组的索引会被重新组织为从 0 开始的连续数字索引。
示例
先定义三个数组:
- a = 2、1、1、3、blue、apple、apple
- b = 2、2、blue
- c = 3、blue
| 差集运算 | 调用代码 | 输出结果 |
|---|---|---|
| [math]\displaystyle{ A - B }[/math]
移除 b 中的元素 |
{{#arraydiff:x | a | b }}{{#arrayprint:x}}
|
1、1、3、apple、apple |
| [math]\displaystyle{ A - C }[/math]
移除 c 中的元素 |
{{#arraydiff:y | a | c }}{{#arrayprint:y}}
|
2、1、1、apple、apple |
| [math]\displaystyle{ A - B - C }[/math]
移除 b 和 c 中的元素 |
{{#arraydiff:z | a | b | c }}{{#arrayprint:z}}
|
1、1、apple、apple |
| [math]\displaystyle{ A - C - B }[/math]
移除 c 和 b 中的元素 |
{{#arraydiff:w | a | c | b }}{{#arrayprint:w}}
|
1、1、apple、apple |
使用场景
适用于需要从数据集中排除特定元素的场景:
过滤指定项:从完整列表中移除特定的元素。
条件筛选:根据多个排除条件过滤数据,如"显示所有文章,但排除草稿、存档和已删除的"。
集合对比:对比两个数据集的差异,找出"仅在 A 中存在而不在 B 中"的元素。
相比手动编写条件判断,使用 arraydiff 的优势:
- 简洁高效:一次调用完成多重过滤
- 逻辑清晰:数学集合语义,易于理解维护
- 动态处理:可处理 SMW 查询等动态数据源
- 可组合:配合其他 Arrays 函数实现复杂数据处理流程
底层代码
处理流程:
- 参数验证:提取所有数组名,忽略不存在的数组。若所有数组均不存在,创建空结果数组
- 差集运算:从第一个有效数组开始,依次与后续数组求差集。其中元素比较基于字符串
- 结果存储:将最终差集结果存入指定的结果数组名
实际用例
- 一些Wiki使用了相关特性,如下所示这个静态列表可能在下列页面更改后过时,仅供批判性参考。

沪公网安备 31011002002714 号