Проверка в 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))

Обратите внимание, что [] в конце массива требуются литералы, потому что нам нужно передать фрагмент памяти статического массива, а не фактическое значение статического массива по значению.

Другие вопросы по тегам