如何在拆分字符串时对 List<LabelItem> 进行排序?

How to sort a List<LabelItem> while splitting a string ?

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

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

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

但由于字符串 CARD 的存在,它不能完美排序,所以它 return 是像 CARD 1、CARD10、CARD11、CAR19、CARD2、CARD21 这样的列表

我知道有很多很好的工具可以在使用像这样的自然排序算法时拆分字符串 link http://www.interact-sw.co.uk/iangblog/2007/12/13/natural-sorting

我发现很难在此标签项上应用拆分(删除字符串 card )并对列表进行排序并使其成为 return CARD1,CARD2 CARD3,CARD10,CARD11,CARD20 而不是 CARD1 CARD10 CARD11 等....

感谢帮助

你要把字符串取出来,把剩下的转换成数字:

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());