VB.NET实现ListBox列表项按整数值从高到低降序排序

注:本人接触VB.NET开发仅3周左右,若存在命名规范使用不当的情况敬请谅解,例如误将string字符串类型表述为文字类型。
建议先阅读以下说明再查看提供的截图,截图中红色标注内容无需关注,蓝色标注为数据传输流向。
业务逻辑
场景为足球最多进球挑战赛的数据录入,执行流程:
- 依次录入参赛者姓名、获得积分(取值范围1-100)、所属赛事(系列1/2/3)
- 单条数据录入完成后添加至名为
solo的ListBox控件 - 重复录入直至累计存满20名参赛者信息
- 点击
Add to Rank按钮,将solo列表框内所有条目迁移至名为RANK的ListBox控件
待实现需求
将RANK列表框内所有条目按积分字段从高到低(100到1)做降序排列。当前未掌握类、数组的使用方法,虽已将积分字段放在列表项内容的最前端,仍不清楚排序逻辑的实现方式。
实现方案(无需自定义类、手动操作数组)
既然你已经把积分放在每条列表项的最开头,不需要额外重构数据存储结构,直接用内置的排序方法提取开头的积分值做比较即可,全程不需要写复杂的类或者数组操作。
直接将以下代码写入Add to Rank按钮的点击事件中即可生效:
' 清空RANK原有内容,避免重复加载 RANK.Items.Clear() ' 取出solo中所有条目存入可排序的集合 Dim itemList As New List(Of String) For Each singleItem In solo.Items itemList.Add(singleItem.ToString()) Next ' 按每条开头的积分值做降序排序 itemList.Sort(Function(itemX, itemY) ' 提取每条内容最前端的积分数字,如果你用的分隔符不是空格,替换Split括号里的空格即可 Dim scoreX = Integer.Parse(itemX.Split(" "c)(0)) Dim scoreY = Integer.Parse(itemY.Split(" "c)(0)) ' 按分数从高到低排序 Return scoreY.CompareTo(scoreX) End Function) ' 将排好序的内容批量加载到RANK列表 RANK.Items.AddRange(itemList.ToArray())
注意:如果你存储列表项时,积分和后续姓名、赛事的分隔符不是空格(比如用了|、-),只需要把代码中Split(" "c)里的空格替换成你实际使用的分隔符即可。
内容的提问来源于stack exchange,提问作者Kram
相关产品推荐
相关产品推荐

