[QT]获取一个QStringList中重复最大次数的字符串
示例程序如下:
QString MainWindow::getTruePlate(QStringList stringList) /* 输入为QStringList,输出为重复次数最多的那个字符串 */
{
if(stringList.isEmpty())
return ""; /* 如果字符串集合为空,则返回一个空字符串 */
QMap<QString, int> countOfStrings;
/* 定义一个QMap容器,通过它可以得到一个<键、值)>的集合,把第一个参数QString作为键,第二个参数int作为键值 */
for (int i = 0; i < stringList.count(); i++) { /* 遍历所有的字符串储存在容器中 */
countOfStrings[stringList[i]]++;
}
qDebug() << countOfStrings; /* 看一下Qmap的结果 */
QList<int> countOfInt = countOfStrings.values(); /* 得到所有的键值,存放在int型List中 */
byte max = countOfInt[0];
for(byte i = 1; i < countOfInt.count(); i++){ /* 得到最大的键值 */
if(countOfInt[i] > max) max = countOfInt[i];
}
QString plateMax = countOfStrings.key(max); /* 由最大的键值去取对应的字符串,就是我们想要的结果 */
return plateMax;
}
测试一下:
void MainWindow::btnTest()
{
QStringList listOfStrings ;
listOfStrings << ("豫A52LJ0") << ("豫A52LJ0")<< ("豫A52LJ0")
<< ("豫A52LJ0") << ("豫A84845")<< ("豫A84845")
<< ("粤A09C2C") << ("粤A09C2C")<< ("豫A84845")
<< ("豫A84861") << ("豫A84865")<< ("豫A84861")
<< ("豫A84861") << ("豫A84861")<< ("豫A84861");
qDebug() << getTruePlate(listOfStrings);
}
点击按钮,输出结果为:
QMap(("粤A09C2C", 2)("豫A52LJ0", 4)("豫A84845", 3)("豫A84861", 5)("豫A84865", 1))
"豫A84861"