【发布时间】:2009-05-30 04:27:35
【问题描述】:
如何检查数组中出现的字符串?我的意思是我可以循环,但是有标准函数吗?
一开始是这样的:
if(str in ["first", "second", "third"])
但它抱怨in 仅适用于关联数组。
我尝试快速查找 phobos 文档,但没有找到任何与数组相关的模块。
那么有什么,还是我只需要手动循环遍历它?
编辑:
我在 D1,火卫一。
【问题讨论】:
如何检查数组中出现的字符串?我的意思是我可以循环,但是有标准函数吗?
一开始是这样的:
if(str in ["first", "second", "third"])
但它抱怨in 仅适用于关联数组。
我尝试快速查找 phobos 文档,但没有找到任何与数组相关的模块。
那么有什么,还是我只需要手动循环遍历它?
我在 D1,火卫一。
【问题讨论】:
如果您的字符串是常量(如示例中所示),您可以使用关联数组字面量,但语法不漂亮:
if (str in ["first"[]:0, "second":0, "third":0])
我认为在 D1 的 Phobos 中没有可以使用的库调用,但 D2 的 std.algorithm 有一些你可以使用的东西:
if (count(["first", "second", "third"][], str))
在 Tango 中,您可以使用来自 tango.text.Util 的通用 contains 函数:
if (contains(["first", "second", "third"][], str))
请注意,数组文字末尾的[] 是必需的,因为我们需要传递静态数组的内存片,而不是按值传递实际的静态数组。
【讨论】:
使用 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;
}
【讨论】: