QT -- QCollat​​or对QStringList进行排序

1.QCollator

QCollator是一个可以适用于特定语言环境的字符串排序工具。QCollator对象还可以与std::sort模板函数一起使用来排序QString列表。

复制代码
QCollator collator;
//区分大小写
collator.setCaseSensitivity(Qt::CaseSensitivity::CaseSensitive);
//不忽略标点符号
collator.setIgnorePunctuation(false);
//排序适用的区域
collator.setLocale(QLocale(QLocale::Chinese));
//使用数字排序
collator.setNumericMode(true);
 
collator(leftName, rightName);
复制代码

例一:

复制代码
std::vector<QString> result;
 
result.emplace_back("A1");
result.emplace_back("KL10");
result.emplace_back("KL1");
result.emplace_back("KL2");
result.emplace_back("KA1");
result.emplace_back("BL1");
result.emplace_back("X1");
result.emplace_back("Q1");
result.emplace_back("a1");
 
std::sort(result.begin(), result.end(), [](const QString& left, const QString& right) {
    QCollator collator;
    collator.setCaseSensitivity(Qt::CaseSensitivity::CaseSensitive); //区分大小写
    collator.setIgnorePunctuation(false);                            //不忽略标点符号
    collator.setLocale(QLocale(QLocale::Chinese));
    collator.setNumericMode(true);                                  // 启用数字排序模式
return collator(left, right); });
复制代码

排序结果:

复制代码
a1
A1
BL1
KA1
KL1
KL2
KL10
Q1
X1
复制代码

 

QCollator类根据排序规则算法比较字符串。以下例子是对QStringList进行数字优先且区分大小写比较排序。

例二:

复制代码
#include <QStringList>
#include <QCollator>
#include <QDebug>

int main( int argc, char *argv[] ) {

   QStringList myStringList = (QStringList() << "abc123" << "ABc99" << "1234abcd");
   QCollator sorter;
   sorter.setNumericMode(true); // 启用数字排序模式
   sorter.setCaseSensitivity(Qt::CaseInsensitive); // 设置区分大小写模式
   std::sort(myStringList.begin(), 
             myStringList.end(), 
             [&](const QString& a, const QString& b) 
             {
                 return sorter.compare( a, b ) < 0;
             });
   qDebug() << myStringList;
}
复制代码

 上面的代码应输出以下内容:

("1234abcd", "ABc99", "abc123")

 

例三:

 

posted @   手磨咖啡  阅读(719)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示