如何将元组字典转列表排序 正确链式调用CompareTo实现Tuple多级排序
问题原因
你原来的代码不生效是因为误用了AndAlso逻辑运算符:CompareTo方法返回值是整数(-1表示当前项更小、0表示相等、1表示当前项更大),AndAlso是逻辑短路运算符,只要第一个CompareTo返回非0值(会被隐式转换为True),就会直接返回逻辑结果,不会执行第二个Item1的比较,自然只有Item2的排序生效。
正确的CompareTo多级排序写法
直接判断第一级比较结果,非0就返回,相等再返回第二级比较结果即可:
newListOfValues.Sort( Function(pair1, pair2) Dim cmpResult = pair1.Key.Item2.CompareTo(pair2.Key.Item2) ' 第一级排序不相等直接返回结果,相等再比较第二级 If cmpResult <> 0 Then Return cmpResult Return pair1.Key.Item1.CompareTo(pair2.Key.Item1) End Function)
更符合你需求的链式调用写法(LINQ)
如果想要类似OrderBy/ThenBy的链式调用效果,直接用LINQ的排序方法更直观,不需要自己手动写比较逻辑:
Dim newListOfValues = ListOfValues.OrderBy(Function(p) p.Key.Item2).ThenBy(Function(p) p.Key.Item1).ToList()
这种写法完全符合你要的链式调用效果,语法更简洁,也不容易出现比较逻辑错误。
内容的提问来源于stack exchange,提问作者SSpoke
相关产品推荐
相关产品推荐

