以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  [求助]如何写集合索引  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=77466)

--  作者:jspta
--  发布时间:2015/11/18 18:35:00
--  [求助]如何写集合索引
大致要求,
Dim lst as new list(of AA) \'AA 是一个类,包含 属性 Name,A1等

如果我想在集合lst中实现一个contains的方法,判断是否包含 Name为 Jack 的AA类
我原来是这么设计的
function contains(byval strName as string) as boolean 
dim bln as boolean = false 
for each a as AA in lst
if a.name = strName then 
bln = true 
exit for 
end if
next
return bln 
end function 

调用的时候
if lst.contains("Jack") then 
end if 

如果通过 for each 循环 判断,在巨量的循环下(上千万甚至上亿),效率非常低,是否高效办法实现,或者新的设计思路?


--  作者:Hyphen
--  发布时间:2015/11/19 8:36:00
--  

使用字典http://www.foxtable.com/help/topics/1945.htm

 

但是如果是有一个上千万甚至上亿的集合,本身就是不合理的设计。可以考虑拆分或者直接从数据库中查询。


--  作者:jspta
--  发布时间:2015/11/19 9:32:00
--  
以下是引用Hyphen在2015/11/19 8:36:00的发言:

使用字典http://www.foxtable.com/help/topics/1945.htm

 

但是如果是有一个上千万甚至上亿的集合,本身就是不合理的设计。可以考虑拆分或者直接从数据库中查询。


已经解决了,减少了2个重要的集合查询,改成先赋值一个变量保存,效率提升了1000倍。

不是查询数据库,是解析字节流,1M就100W了,不过不是全部循环,目前就循环了10%不到。字典大概超过10W存储后效率下降非常多,经过两次循环优化,现在读取速度已经从几十秒降到0.01秒了