目录
本来我是想建立三个QList链表,
A链表放原始数据
B链表放不重复得数据
C链表放每个数据重复得总数
但是很快我就发现了一个问题,我不知道如何把B和C连接起来,以及如何让QList得某个值自加1。
在通过百度得帮助下,我发现了可以用Map键值对来解决这个问题。
由于该链接得语法是Java,所以我自己做了些修改。具体操作过程如下:
一、去除QList中得重复值
ps:代码写在Mainwindow.cpp中
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QList>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QList<QString> m_ListAllSrt;
m_ListAllSrt.clear();
m_ListAllSrt = {"a", "a", "b", "b", "c", "c"};
for(int i=0; i<m_ListAllSrt.size(); i++)
{
for(int j=i+1; j<m_ListAllSrt.size(); j++)
{
if(m_ListAllSrt.at(i) == m_ListAllSrt.at(j))
{
m_ListAllSrt.removeAt(j);
m_ListCount.append(1);
j--;
}
}
}
qDebug() << "m_ListAllStr:";
for(int k=0; k<m_ListAllSrt.size(); k++)
{
qDebug() << m_ListAllSrt.at(k);
}
}
输出结果:
"a"
"b"
"c"
二、找出list得重复值和重复值得个数
这里需要用到QMap键值对,已知当QMap添加了重复键,QMap会保存最后一次添加得键值对。
借助参考链接得逻辑思路,具体代码如下:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>
#include <QMap>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
QList<QString> m_ListStr;
m_ListStr.clear();
m_ListStr = {"a", "a", "a", "a", "a", "a","b", "b", "b", "c", "c","a", "a","c", "c", "d"};
QMap<QString, int> mapStrInt;
int count=1;
for(int i=0; i<m_ListStr.size(); i++)
{
if( nullptr != mapStrInt.find(m_ListStr.at(i)).key())
{
mapStrInt.insert(m_ListStr[i], mapStrInt.find(m_ListStr[i]).value()+1);
}
else
{
mapStrInt.insert(m_ListStr[i], count);
}
}
qDebug() << "mapStrInt:";
QMap<QString, int>::Iterator it = mapStrInt.begin();
while(it!=mapStrInt.end())
{
qDebug() << it.key() << it.value();
it++;
}
}
运行结果:
“a” 8
"b" 2
"c" 4
"d" 1