首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >部分密钥匹配QHash

部分密钥匹配QHash
EN

Stack Overflow用户
提问于 2016-06-10 06:33:58
回答 2查看 927关注 0票数 1

我有一个QHash定义如下

代码语言:javascript
复制
QHash<QString, QString> hashLookup;

我在这个散列中插入了以下几个值:

代码语言:javascript
复制
hashLookup.insert("OMG", "Oh my God!");
hashLookup.insert("LOL", "Laugh out loud");
hashLookup.insert("RIP", "Rest in peace");
// and so on

我有以下几个QStrings:

代码语言:javascript
复制
QString a = "OMG_1";
QString b = "LOL_A";
QStirng c = "OMG_YOU";
QString d = "RIP_two";

我应该知道这些值是否存在于hashLookup中,也就是说,由于OMG_1包含OMG,所以我应该能够检索Oh my God!

我试着用

代码语言:javascript
复制
if(hashLookup.contains(a)
//do something

当然,它试图寻找一个关键的OMG,它不存在于查找表中,并且不返回任何内容。Qt中可以部分匹配键值吗?如果是的话,我应该如何实施这一点。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-10 07:19:28

QHash类中没有通过部分匹配键提取值的机会,因为QHash使用哈希函数(Qt文档:qHash):

qHash()函数根据键计算一个数值。它可以使用任何可以想象的算法,只要它总是返回相同的值,如果给定相同的参数。换句话说,如果e1 == e2,那么qHash(e1) == qHash(e2)也必须保持不变。但是,为了获得良好的性能,qHash()函数应该尽可能地尝试为不同的键返回不同的哈希值。

不同的键几乎总是给出不同的哈希。

在您的任务中,您可以在QHash键上运行并与QString功能进行比较。就像这样:

代码语言:javascript
复制
QString getHashValue(const QString& strKey, const QHash<QString, QString>& hashLookup)
{
    QList<QString> uniqueKeys = hashLookup.uniqueKeys();
    foreach(const QString& key, uniqueKeys)
    {
        if(strKey.contains(key))
            return hashLookup.value(key);
    }
}

..。

代码语言:javascript
复制
getHashValue("OMG_1", hashLookup);
票数 2
EN

Stack Overflow用户

发布于 2016-06-10 07:07:11

首先,在您的示例中,QHash.contains(QString key)方法尝试查找OMG_1,而实际上它将找不到。

您可以实现一个方法,该方法将接受扩展的键,并尝试在哈希中定位给定值的任何子键。在这里,你必须定义一些规则,我认为,否则它可能不会返回的任天堂价值。

想想下面的例子:哈希包含键、OMG、OM。要匹配提供的扩展密钥,您可以实现如下内容

代码语言:javascript
复制
bool hashContainsExpanded(const QString &key) const {
    if (!hash.contains(key) && key.length() > 1)
        return hasContainsExpanded(key.substring(0, key.length() - 1));
    return hash.contains(key);
}

此方法将允许您找到密钥OMG,而不是包含在该密钥中的OM。您还可以实现一个方法,该方法将接受提供的扩展键的第一个字符,并测试其是否包含。如果没有找到,它将采取第二次和再次测试,等等。这将与OM相匹配,有利于OMG

另外,请记住,您以后可以使用匹配的键工作,因此您应该返回它,而不是只返回true。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37741393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档