Controllando in D se una stringa è in array?
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.
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.