如何对列表进行排序<;LabelItem>;同时分割字符串

本文关键字:gt LabelItem 字符串 分割 lt 列表 排序 | 更新日期: 2023-09-27 18:00:43

我有一个labelItem列表,其中包含以下元素:CARD1、CARD2、CARD10、CARD11

我正在尝试对它们进行排序,所以我应用了下面的排序

 List<LabelItem> sortedList = _labelItems.OrderBy(x => x.ViewLabel).ToList();
        _labelItems = new BindingList<LabelItem>(sortedList);

但它并没有完全排序,因为字符串CARD的存在,所以它返回列表,如CARD1、CARD10、CARD11、CAR19、CARD2、CARD21

我知道有很多关于如何在使用自然排序算法的同时拆分字符串的好工具,比如这个链接http://www.interact-sw.co.uk/iangblog/2007/12/13/natural-sorting

我发现很难在这个标签上应用拆分(删除字符串卡),并对列表进行排序,使其返回CARD1,CARD2 CARD3,CARD10,CARD11,CARD20,而不是CARD11 CARD10 CARD11等…

我感谢的帮助

如何对列表进行排序<;LabelItem>;同时分割字符串

您必须取出字符串并将其余部分转换为数字:

List<LabelItem> sortedList = _labelItems.OrderBy(x => Convert.ToInt32(x.ViewLabel.Replace("CARD", "")).ToList();
    _labelItems = new BindingList<LabelItem>(sortedList);

注意:只有当您知道所有项目都以单词CARD开头时,这才有效。如果他们不这样做,你需要找到一种方法来获得的数字

我找到了我想要的东西,确实就像你建议的那样,当我列表中只有CARD时很好,然后我发现不,它并不总是一张卡。它可能是设备,上帝只知道他们将来会添加什么

另外,像上面的答案一样使用基本排序会得到用ASCII排序错误排序的列表

因此,更好的方法是实现中所解释的http://www.dotnetperls.com/alphanumeric-sorting

然后我所做的就是像一样对BindingList进行排序

BindingList<LabelItem> sortedList = new BindingList<LabelItem>(_labelItems.OrderBy(x => x.Label, new AlphanumComparatorFast()).ToList());