我想知道如何比较2 QStringList
并以下列方式显示结果:
我有2 QPlainTextEdit
A和B
我想要做的是:取B中的每一行并与A中的所有行进行比较。如果在一行行比较中,所有6等于int n6(例如)将添加1.如果只有5是相等的,int n5将加1,依此类推。
我尝试了一些事情,但没有一个能奏效。如果你能对此有所了解,我将不胜感激。
答案 0 :(得分:2)
使用QSet
和subtract()
以及count()
或size()
QStringList mOldList, mNewList;
mOldList.append("1");
mOldList.append("2");
mOldList.append("3");
mOldList.append("4");
mOldList.append("5");
mOldList.append("10");
mNewList.append("1");
mNewList.append("2");
mNewList.append("3");
mNewList.append("4");
mNewList.append("5");
mNewList.append("15");
QSet<QString> subtraction = mNewList.toSet().subtract(mOldList.toSet());
QSet<QString> subtraction1 = mOldList.toSet().subtract(mNewList.toSet());
foreach (const QString &filename, subtraction)
qDebug() << " difference: "<< filename;
foreach (const QString &filename, subtraction1)
qDebug() << " difference: "<< filename;
结果:
difference: "15"
difference: "10"
例如下一个列表:
mOldList.append("1");
mOldList.append("2");
mOldList.append("3");
mOldList.append("4");
mOldList.append("5");
mOldList.append("10");
mNewList.append("1");
mNewList.append("2");
mNewList.append("3");
mNewList.append("4");
mNewList.append("5");
mNewList.append("15");
QSet<QString> subtraction = mNewList.toSet().subtract(mOldList.toSet());
foreach (const QString &fileName, subtraction)
qDebug() << " difference: "<< fileName;
结果只有15:
difference: "15"
这意味着一个元素不相同。
mOldList.append("1");
mOldList.append("2");
mOldList.append("3");
mOldList.append("4");
mOldList.append("5");
mOldList.append("10");
mNewList.append("1");
mNewList.append("2");
mNewList.append("3");
mNewList.append("4");
mNewList.append("115");
mNewList.append("15");
两个元素不相同:
difference: "115"
difference: "15"
或另一种方式:
qSort(mNewList);
qSort(mOldList);
if(mNewList == mOldList){
qDebug() << "same";
}
else{
qDebug() << "not same";
}
答案 1 :(得分:1)
首先计算每个字符串的匹配位数
int matchingDigits(QString str1, QString str2)
{
int matches = 0;
int minSize = str1.size() < str2.size() ? str1.size() : srt2.size();
for (int pos = 0; pos < minSize; ++pos)
{
if (str1.at(pos) == str2.at(pos) ++matches;
}
return matches;
}
现在您将所有字符串相互比较(迭代两个StringLists),如果matchingDigits()
是> 0
,那么您可以增加结果计数器。
QStringList listA;
QStringList listB;
foreach (QString a, listA)
{
foreach (QString b, listB)
{
int matches = matchingDigits(a, b);
if (matches > 0)
{
// do something fancy
}
}
}