请问,对象数组 如何按指定属性值排序

weixin_43702836 2019-02-18 11:19:05
控件数组如何按指定属性值排序
我使用treeview控件时,需要查询节点,使用递归遍历节点效率太低。想使用控件数组,但是对Array.Sort不熟,请高手指教一下,谢谢!
...全文
414 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
weixin_43702836 2019-02-19
  • 打赏
  • 举报
回复
问题自己解决了。。。
方法没问题,是我的数组第一个元素为空值造成的。原来我定义的比较类存在Bug,当比较的对象有一个为空值时就会出错。
threenewbee 2019-02-18
  • 打赏
  • 举报
回复
递归遍历节点效率太低
除非你有索引,否则只能递归遍历
weixin_43702836 2019-02-18
  • 打赏
  • 举报
回复
比如。在512个节点内查询,符合条件的节点刚好在最后一个,如果用递归的方法遍历查找,需要比对512次才能找到结果。如果用对象数组排序后查询,只需比对9次,这两种方法效率差的非常大。所以,我才会使用对象数组。
我在网上搜了一下,好像Array.Sort方法中,需要 IComparer 接口。
我自己写了一个比较类
源码:
Public Class CompareA '比较类
Implements IComparer
Public Function Compare(ByVal x As Object, ByVal y As Object) As Integer Implements System.Collections.IComparer.Compare
If x.Text > y.Text Then
Return 1
ElseIf x.Text = y.Text Then
Return 0
Else
Return -1
End If
End Function

在使用中
Dim A1 As New CompareA
Array.Sort(Arr, A1)
运行后出错。在CompareA类中,x 有数组第一个元素的值,y 为什么是Nothing ??????
正怒月神 2019-02-18
  • 打赏
  • 举报
回复
不是太明白 treeview.OrderBy(x=>x.控件属性) ???
lindexi_gd 2019-02-18
  • 打赏
  • 举报
回复
遍历的性能和排序的差不多,主要在渲染的时间才是最多所以如果你只是修改排序应该不会修改

16,722

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧