请问VB中如何把一个数组直接赋给另一个数组?



------
比如 dim A() as integer, B() as integer
当A有了值后,怎么才能把A直接赋给B呢 ,我不想一个一个的循环赋值

另外还想问一下是否可以把一个记录集直接赋给另一个记录集? 
dim RS1 AS new adodb.recordset
dim RS2 AS new adodb.recordset
可以直接 rs1=rs2吗?
 
------
数组应该可以用复制内存的方法.

而类(对象)应该不可以.

类(对象)名保存的好象是 指针之类的东西. 指向某个实类或对象.

直接赋值无用,在操作的时候,二个类或对象数据都会改变.
------
不行,你这只是把rs1指向rs2
  
*****************************************************************************
欢迎使用CSDN论坛专用阅读器 : CSDN Reader(附全部源代码) 

http://feiyun0112.cnblogs.com/
------
顶一楼
------
"数组应该可以用复制内存的方法. "
----请教具体语句怎么写啊?
------
b是动态数组直接:
b=a

set rs2=rs1
------
Dim a(2) As Integer, b(2) As Integer
  a(0) = 1
  a(1) = 2
  a(2) = 3
  b = a
出错啊,提示不能给数组赋值
------
补充一下,set rs2=rs1这样,注意对rs1的操作可能会影响到rs2...
------
引用 6 楼 jiangsu19747 的回复:
Dim a(2) As Integer, b(2) As Integer
  a(0) = 1
  a(1) = 2
  a(2) = 3
  b = a
出错啊,提示不能给数组赋值

------
for i=0 to 2
 b(i)=a(i)
next i
------
CopyMemory是高效的方法,但对于不大的数组b=a更合适...
对于记录集,你还可以用clone方法复制副本:
set rs2=rs.clone
然后执行:
rs1.requery

这样rs1和rs2就脱离关联了...
------
引用 12 楼 vbman2003 的回复:
CopyMemory是高效的方法,但对于不大的数组b=a更合适...
对于记录集,你还可以用clone方法复制副本:
set rs2=rs.clone
然后执行:
rs1.requery

这样rs1和rs2就脱离关联了...

------
引用楼主 jiangsu19747 的回复:
比如  dim A() as integer, B() as integer
当A有了值后,怎么才能把A直接赋给B呢  ,我不想一个一个的循环赋值

另外还想问一下是否可以把一个记录集直接赋给另一个记录集?
dim RS1 AS new adodb.recordset
dim RS2 AS new adodb.recordset
可以直接  rs1=rs2吗?


------
数组可以直接赋值,不过目标数组必须是动态数组:

http://www.m5home.com/blog/article.asp?id=262
------
数据集可以用clone方法
------
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Dim bytes As Long
Dim intSrc(1 To 6000000) As Integer
Dim intDest(1 To 6000000) As Integer

bytes = (UBound(intSrc) - LBound(intSrc) + 1) * Len(intSrc(LBound(intSrc)))

CopyMemory intDest(LBound(intDest)), intSrc(LBound(intSrc)), bytes
End Sub
------
对于integer型的数组,用循环是最好的方法 为什么不想用呢?
------
用clone方法
------
数组应该可以用复制内存的方法. 

而类(对象)应该不可以. 

类(对象)名保存的好象是 指针之类的东西. 指向某个实类或对象. 

直接赋值无用,在操作的时候,二个类或对象数据都会改变.
------
这个要来学习一下,继续等更有效方法
------
引用 8 楼 vbman2003 的回复:
引用 6 楼 jiangsu19747 的回复:
Dim a(2) As Integer, b(2) As Integer
  a(0) = 1
  a(1) = 2
  a(2) = 3
  b = a
出错啊,提示不能给数组赋值

Dim a(2) As Integer, b() As Integer
  a(0) = 1
  a(1) = 2
  a(2) = 3
b = a
看清上面有回复,b是动态数组!

------
引用 17 楼 of123 的回复:
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Dim bytes As Long
Dim intSrc(1 To 6000000) As Integer
Dim intDest(1 To 6000000) As Integer

bytes = (UBound(intSrc) - LBound(intSrc) + 1) * Len(intSrc(LBound(intSrc)))

CopyMemory intDest(LBound(intDest)), intSrc(LBound(intSrc)), bytes
End Sub

------
学会了,谢谢
------
使用CopyMemory函数可以完成数组的赋值,
------
对动态数组可以直接整体赋值。

------
thaknyou somuch
------
upup
------
o
------
只要获取数组的地址就可以了.
------
引用 17 楼 of123 的回复:
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Dim bytes As Long
Dim intSrc(1 To 6000000) As Integer
Dim intDest(1 To 6000000) As Integer

bytes = (UBound(intSrc) - LBound(intSrc) + 1) * Len(intSrc(LBound(intSrc)))

CopyMemory intDest(LBound(intDest)), intSrc(LBound(intSrc)), bytes
End Sub

------
使用CopyMemory函数,将指向修改一下就可以。
------
ding
------
UP

------
gen jing
------
数组是不可以赋值的,动态数组有是另外一回事,在c++里叫向量,已脱离了你的原意,如果非得到一的副本,同意上面的用 copymemery,但小数组不宜用之,消耗大
------
谢谢大家的回复。这么多热心人,我还担心现在没什么人用VB了呢。前天另一公司老板跟我说事情,问我用什么编程,我知他们用C#,我说我们用VB呢,然后故意添了一句,WINFORM程序VB比C#快,生怕人家看不起。
------
WINFORM程序VB比C#快???


LZ试过?》
------
呵呵,没试过,看网上一篇贴子里这么说的
------
关注一下!
------
引用 38 楼 m60a1 的回复:
WINFORM程序VB比C#快???


LZ试过?》

------
Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)

Dim bytes As Long
Dim intSrc(1 To 6000000) As Integer
Dim intDest(1 To 6000000) As Integer

bytes = (UBound(intSrc) - LBound(intSrc) + 1) * Len(intSrc(LBound(intSrc)))

CopyMemory intDest(LBound(intDest)), intSrc(LBound(intSrc)), bytes
End Sub


顶这个,学习了谢谢高手们
桂ICP备07017180号