VB有没有list,注意不是listbox

极语言中文编程 2012-05-09 01:20:08
VB里经常使用Dictionary和Collection ,但是很多数据全是数字型的。也就是一维数组形式。比如有1000条数据,查找ID为21亿的记录的数量是多少。这是数据库里常用的,因为查询过于频繁,想用其它方式代替。如果用数组,由于ID的值过于大,但数据并没有多少。声明下标为21亿的数组,那不是非常浪费吗?
而在VB里就是不知道list该怎么声明。或者类似Dictionary和Collection的东西,毕竟它们可以存储字符甚至对象,我想要只存储数字的。
我的情况是索引不大于21亿。存储内容不大于32767。应该说是声明dim aa(20000000000) as Integer就够我用了,但里面也只有1000多条数据。真不想浪费那么多。
...全文
398 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
三断笛 2012-05-12
  • 打赏
  • 举报
回复
20亿个整数 内存不够吧?得放在文件中.
楼主的重点在查找,和List或Dictionary没多大关系.
楼主应该研究查找算法.

把数据导入数据库,建立索引,是最低成本,性能相当优的方式.
楼主足够强大的话,可以针对不同的需求建立完全不同的算法.
嗷嗷叫的老马 2012-05-11
  • 打赏
  • 举报
回复
为啥非要ID=索引?做个结构不行么,一个成员保存数据,一个成员保存ID:

private type MyType
ID as long 'ID放这个成员
Data as xxxxxx
end type

dim MyData() as mytype
threenewbee 2012-05-10
  • 打赏
  • 举报
回复
没有,VB这种玩具语言是不会有数据结构方面封装的类库的。

你可以自己实现一个。不过你应该实现的不是List,而是HashTable。
ah_2047 2012-05-10
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]
1: 索引不大于21亿。存储内容不大于32767

这样不是重复的内容有很多么?

2; dim aa(20000000000) as Integer

你确定自己的电脑有40G内存么?
[/Quote]
怎么可能,VB不会让你定义这么大的数据。
还有4楼说的用FIND办法。请问你不适用SQL把数据查出来,你怎么FIND?
除非你一次读入到内存中去,然后在FIND。
读进去你不使用SQL读,那么换别的办法你又的整理数据后放进去,速度又如何?
熊孩子开学喽 2012-05-10
  • 打赏
  • 举报
回复
1: 索引不大于21亿。存储内容不大于32767

这样不是重复的内容有很多么?

2; dim aa(20000000000) as Integer

你确定自己的电脑有40G内存么?
worldy 2012-05-10
  • 打赏
  • 举报
回复
没有听说一个数值为21亿就要使用“声
明下标为21亿的数组” :)

方法1
type sFlh
id as long
count as long
end type

dim a()as sflh

将你的id及数值填进去

  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
sql查询数据库是很方便的,没有其他方法可以代替!
(即使有,速度上比sql慢多了)
[/Quote]


[Quote=引用 4 楼 的回复:]
我用的是记录集的find方法,理论上find要比SQL查询快NNNNN倍,设计程序要是用SQL查询,这么慢的东西我是无法接受的。
楼上是用for循环,我不能说那很慢,只是觉得不够简练。
这里的情况是不能用动态数组,因为数据是有的,必须要查询这几千条数据的任意一个。正好最好的编号就是20亿。如果存在这个20亿,那么数组的维数不应该小于20亿的
[/Quote]


搬个小板凳,听课……
哪儿有爆米花卖?
  • 打赏
  • 举报
回复
我用的是记录集的find方法,理论上find要比SQL查询快NNNNN倍,设计程序要是用SQL查询,这么慢的东西我是无法接受的。
楼上是用for循环,我不能说那很慢,只是觉得不够简练。
这里的情况是不能用动态数组,因为数据是有的,必须要查询这几千条数据的任意一个。正好最好的编号就是20亿。如果存在这个20亿,那么数组的维数不应该小于20亿的
of123 2012-05-09
  • 打赏
  • 举报
回复
Type mList
Index As Long
Value As Integer
End Type

---------------------------------------------

Dim n() As mList

Private Sub Command1_Click()
Dim i As Long

For i = LBound(n) To UBound(n)
If n(i).Index = 56789 Then
MsgBox "Index = 56789, Value = " & n(i).Value
End If
Next i
End Sub

Private Sub Form_Load()
ReDim n(2)

n(0).Index = 12345
n(0).Value = 0

n(1).Index = 56789
n(1).Value = 22

n(2).Index = 34567
n(2).Value = 8
End Sub

Private Sub List_Add(ByVal Index As Long, ByVal Value As Integer)
Dim m As Long

m = UBound(n) + 1

ReDim Preserve n(m)

n(m).Index = Index
n(m).Value = Value

End Sub
VBToy 2012-05-09
  • 打赏
  • 举报
回复
可以用用动态数组保存数据,自己做一个类似于collection的东西。
东方之珠 2012-05-09
  • 打赏
  • 举报
回复
sql查询数据库是很方便的,没有其他方法可以代替!
(即使有,速度上比sql慢多了)

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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