Domanda

Come faccio a verificare per un avvenimento di stringa in un array? Voglio dire, certo che posso loop, ma c'è una funzione standard?

in un primo momento ho fatto:

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

, ma si lamentava che in funziona solo con gli array associativi.

Ho cercato di occhiata rapidamente i documenti Phobos, ma non ho trovato alcun modulo relativo agli array.

Quindi non v'è nulla, o non mi resta che scorrere manualmente?

Modifica:

Sono in D1, Phobos.

È stato utile?

Soluzione

Con D1 Phobos, dovrete farlo da soli. Ma non è troppo difficile.

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

Inoltre, si dovrebbe essere in grado di utilizzare in questo modo:

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

La speranza che aiuta.

Per inciso, è possibile modificare quanto sopra a lavorare come una funzione "indexOf":

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

Altri suggerimenti

Se le stringhe sono costanti (come nell'esempio), è possibile utilizzare un array associativo letterali, ma la sintassi non è abbastanza:

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

Non credo che ci sia una libreria chiamata, è possibile utilizzare in Phobos di D1, ma std.algorithm di D2 ha qualcosa che si potrebbe usare:

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

In Tango, è possibile utilizzare la funzione di contains generica da tango.text.Util:

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

Si noti che è richiesto l'[] alla fine di letterali matrice perché dobbiamo passare una fetta memoria della matrice statica, e non l'array statico effettivo valore.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top