Проверьте, содержит ли массив элемент в D

для ассоциативных массивов мы можем написать

if( elem in array) { .. }

что мы пишем для простого массива? Я хочу написать подтверждение, например.

enforce(input in [10,20,40]);

Ответ 1

in грустно не работает с массивом. Вы должны использовать canFind или search, определенные в std.algorithm http://dlang.org/phobos/std_algorithm.html. Поскольку вы только хотите знать, присутствует ли он, а не там, где это возможно, canFind - правильный инструмент.

import std.algorithm: canFind;

if (my_array.canFind(42)) { stuff }

Ответ 2

В дополнение к canFind, также есть countUntil, который предоставит вам индекс первого вхождения.

Обратите внимание, что ключевое слово D "in" ищет ключи ассоциативного массива, а не его значения:

string[string] array = [
    "foo" : "bar"
];

writeln(("foo" in array) != null); // true
writeln(("bar" in array) != null); // false