检查数组是否包含D中的元素

Par*_*bay 12 arrays d

对于关联数组,我们可以编写

if( elem in array) { .. }
Run Code Online (Sandbox Code Playgroud)

我们为一个简单的数组写了什么?我想写验证,例如

enforce(input in [10,20,40]);
Run Code Online (Sandbox Code Playgroud)

Nil*_*Nil 21

in遗憾的是在阵列上不起作用.您必须在http://dlang.org/phobos/std_algorithm.html中使用canFindsearch定义.因为你只想知道它是否存在,而不是它的位置,是正确的工具.std.algorithm canFind

import std.algorithm: canFind;

if (my_array.canFind(42)) { stuff }
Run Code Online (Sandbox Code Playgroud)

  • 为了澄清,``in``适用于关联数组而不是D中的常规数组,因为它们的实现方式.关联数组实际上是一个哈希表,这意味着AAs的"in"的时间复杂度为O(1).对于普通数组,``in``的时间复杂度为O(n),因为它必须遍历数组才能找到你正在寻找的元素.D社区决定根据容器有一个可以是O(1)或O(n)的运算符不是一个好主意,因此``in``只能用于AA(和任何用户定义的)实现opIn的容器. (13认同)