如果字符串在数组中,则检入D?

时间:2009-05-30 04:27:36

标签: arrays d phobos

如何检查数组中是否存在字符串?我的意思是我可以循环,但是有标准功能吗?

起初我做了:

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

但它抱怨in仅适用于关联数组。

我试图快速查找phobos文档,但没有找到任何与数组相关的模块。

那么有什么东西,或者我只需要手动循环它吗?

编辑:

我在D1,phobos。

2 个答案:

答案 0 :(得分:6)

如果您的字符串是常量(如示例中所示),您可以使用关联数组文字,但语法并不漂亮:

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

我不认为你可以在D1的Phobos中使用库调用,但D2的std.algorithm有一些你可以使用的东西:

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

在Tango中,您可以使用contains中的通用tango.text.Util函数:

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

请注意,数组文字末尾的[]是必需的,因为我们需要传递静态数组的内存片,而不是实际的静态数组值。

答案 1 :(得分:4)

使用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;
}