4

配列内の文字列の出現を確認するにはどうすればよいですか?ループできるのは確かですが、標準機能はありますか?

最初に私はしました:

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

inしかし、連想配列でのみ機能すると不満を漏らしました。

phobosのドキュメントをすばやく検索しようとしましたが、配列に関連するモジュールが見つかりませんでした。

それで、何かありますか、それとも手動でループする必要がありますか?

編集:

私はD1、phobosにいます。

4

2 に答える 2

6

文字列が定数の場合(例のように)、連想配列リテラルを使用できますが、構文はきれいではありません。

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

D1のPhobosで使用できるライブラリ呼び出しはないと思いますが、D2のstd.algorithmには使用できるものがあります。

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

containsTangoでは、次のジェネリック関数を使用できますtango.text.Util

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

[]実際の静的配列の値ではなく、静的配列のメモリスライスを渡す必要があるため、配列リテラルの最後にが必要であることに注意してください。

于 2009-05-30T05:08:19.923 に答える
4

D1 フォボスでは、自分で行う必要があります。しかし、それはあまりにも難しいことではありません。

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;
}
于 2009-05-30T08:50:52.757 に答える