Проверка в D, если строка находится в массиве?
Как проверить наличие строки в массиве? Я имею в виду, конечно, я могу зациклить, но есть ли стандартная функция?
сначала я сделал:
if(str in ["first", "second", "third"])
но жаловался что in
работает только с ассоциативными массивами.
Я попытался быстро найти документацию по Phobos, но не нашел ни одного модуля, связанного с массивами.
Так есть что-нибудь, или я просто должен пройти через это вручную?
Редактировать:
Я на D1, Фобос.
2 ответа
С D1 Phobos вам придется делать это самостоятельно. Но это не так уж сложно.
bool contains(T)(T[] a, T v)
{
foreach( e ; a )
if( e == v )
return true;
return false;
}
Плюс, вы должны быть в состоянии использовать это так:
auto words = ["first"[], "second", "third"];
if( words.contains(str) ) ...
Надеюсь, это поможет.
Кстати, вы можете изменить вышеперечисленное для работы в качестве функции "indexOf":
size_t indexOf(T)(T[] a, T v)
{
foreach( i, e ; a )
if( e == v )
return i;
return a.length;
}
Если ваши строки постоянны (как в примере), вы можете использовать литерал ассоциативного массива, но синтаксис не очень приятный:
if (str in ["first"[]:0, "second":0, "third":0])
Я не думаю, что есть вызов библиотеки, который вы можете использовать в Фобосе D1, но алгоритм std.algorithm D2 имеет то, что вы могли бы использовать:
if (count(["first", "second", "third"][], str))
В танго вы можете использовать общий contains
функция от tango.text.Util
:
if (contains(["first", "second", "third"][], str))
Обратите внимание, что []
в конце массива требуются литералы, потому что нам нужно передать фрагмент памяти статического массива, а не фактическое значение статического массива по значению.