Skip to content

数组搜索函数

数组函数 index-of 在数组中查找某个值,而 any、all 和 find-index 这些操作会用谓词表达式测试数组的各个元素。

注意:这些函数是实验性的,可能会发生变化。 它们以 -1 或 false 的结果表示“未匹配”;一旦语言支持了可选 类型,index-of 和 find-index 应改为返回可选索引。 跟踪 issue:slint-ui/slint#12777。

array.index-of(value) 读取第一个等于 value 的元素的索引, 如果数组中不存在这样的元素,则返回 -1。

export component Example {
in-out property<[string]> names: ["Aardvark", "Beaver"];
out property <int> beaver-index: names.index-of("Beaver"); // 1
}
slint

谓词表达式的形式为 (name) => condition。 它将 name 绑定到一个值并求值 condition,后者必须是 bool。 该名称的作用域仅限于 condition 内部。

谓词被传递给数组操作 any、all 和 find-index, 这些操作会依次将每个元素作为 name 提供:

  • array.any((name) => condition) 在 condition 对至少一个元素成立时读取为 true。
  • array.all((name) => condition) 在 condition 对每个元素都成立时读取为 true。
  • array.find-index((name) => condition) 读取第一个使 condition 成立的 元素的索引,如果没有元素匹配则返回 -1。

参数名称仅在谓词表达式内部可用, 其类型从数组元素类型推断。

对于空数组,any 返回 false,all 返回 true, find-index 返回 -1。

对于简单的值相等查找,优先使用 array.index-of(value),而不是 find-index((name) => name == value):前者不需要谓词。 当匹配条件不只是与单个值相等时,才使用 find-index。

export component Example {
in-out property<[int]> list-of-int: [1, 2, 3];
out property <bool> contains-two: list-of-int.any((value) => value == 2); // true
out property <bool> all-positive: list-of-int.all((value) => value > 0); // true
out property <int> index-of-first-even: list-of-int.find-index((value) => mod(value, 2) == 0); // 1
}
slint

谓词是 Slint 语言中唯一形式的闭包,并且只能作为 any、all 和 find-index 的参数。 谓词不能存储在属性中,不能传递给函数或回调,也不能直接调用。 谓词必须内联写在 any、all 或 find-index 的调用中; 传递存储在局部变量中的闭包会被错误拒绝。


© 2026 SixtyFPS GmbH