在QStringList中搜索特定项目,然后搜索可能包含项目的其他项目

时间:2013-08-06 14:22:59

标签: c++ qt

我希望得到搜索的所有“指数”。显然“QStringList :: indexOf”一次返回一个索引......所以我必须做一个while循环。但它也“仅”完全匹配。

如果我想返回拥有“哈士奇”的所有物品的索引怎么办...那么也许是“狗”...然后“狗2”。 我坚持比“QString :: contains”然后循环,来完成这个?或者是否有更多与我缺失的“QStringList类”相关的方式

QStringList dogPound;
dogPound    << "husky dog 1"
            << "husky dog 2"
            << "husky dog 2 spotted"
            << "lab dog 2 spotted";

2 个答案:

答案 0 :(得分:2)

您可以使用QStringList::filter方法。它返回一个新的QStringList,其中包含从过滤器传递的所有项目。

QStringList dogPound;
dogPound    << "husky dog 1"
            << "husky dog 2"
            << "husky dog 2 spotted"
            << "lab dog 2 spotted";

QStringList spotted = dogPound.filter("spotted");
// spotted now contains "husky dog 2 spotted" and "lab dog 2 spotted"

答案 1 :(得分:1)

这似乎是在QStringList中找到特定QString位置的最直接的方法:

#include <algorithm>

#include <QDebug>
#include <QString>
#include <QStringList>


int main(int argc, char *argv[])
{
    QStringList words;
    words.append("bar");
    words.append("baz");
    words.append("fnord");

    QStringList search;
    search.append("fnord");
    search.append("bar");
    search.append("baz");
    search.append("bripiep");

    foreach(const QString &word, search)
    {
        int i = -1;
        QStringList::iterator it = std::find(words.begin(), words.end(), word);
        if (it != words.end())
            i = it - words.begin();

        qDebug() << "index of" << word << "in" << words << "is" << i;
    }

    return 0;
}