Pergunta

Como faço para verificar se há uma ocorrência corda em uma matriz? Quero dizer certeza de que pode fazer um loop, mas existe uma função padrão?

no começo eu fiz:

if(str in ["first", "second", "third"])

mas reclamou que in só funciona com arrays associativos.

Eu tentei pesquisar rapidamente os docs Phobos, mas não encontrou qualquer módulo relacionado com matrizes.

Então, há algo, ou eu só tenho que percorrer-lo manualmente?

Editar:

Eu estou em D1, Phobos.

Foi útil?

Solução

Com D1 Phobos, você terá que fazê-lo sozinho. Mas não é muito difícil.

bool contains(T)(T[] a, T v)
{
    foreach( e ; a )
        if( e == v )
            return true;
    return false;
}

Além disso, você deve ser capaz de usá-lo como este:

auto words = ["first"[], "second", "third"];
if( words.contains(str) ) ...

Espero que ajude.

A propósito, você pode modificar o acima para o trabalho como uma função "indexOf":

size_t indexOf(T)(T[] a, T v)
{
    foreach( i, e ; a )
        if( e == v )
            return i;
    return a.length;
}

Outras dicas

Se as cordas são constantes (como no exemplo), você pode usar um literal matriz associativa, mas a sintaxe não é bonito:

if (str in ["first"[]:0, "second":0, "third":0])

Eu não acho que há uma chamada de biblioteca que você pode usar em Phobos de D1, mas std.algorithm de D2 tem algo que você poderia usar:

if (count(["first", "second", "third"][], str))

Em Tango, você pode usar a função contains genérico de tango.text.Util:

if (contains(["first", "second", "third"][], str))

Note que o [] no final de literais de matriz é necessária porque precisamos passar uma fatia de memória da matriz estática, e não a matriz estática real por valor.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top