qt中QList去重与统计重复次数

目录

一、去除QList中得重复值

二、找出list得重复值和重复值得个数


       

本来我是想建立三个QList链表,

        A链表放原始数据

        B链表放不重复得数据

        C链表放每个数据重复得总数

        但是很快我就发现了一个问题,我不知道如何把B和C连接起来,以及如何让QList得某个值自加1。

        在通过百度得帮助下,我发现了可以用Map键值对来解决这个问题。

        参考链接:如何找出list中重复的数据以及重复数据的个数

        由于该链接得语法是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

  • 4
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值