数组合并,并去除重复数。

ningyong58 2011-04-27 02:05:56
数组1 Arr1(2,1)
x , y
12 , 33
10 , 18
36 , 33
数组2 Arr2(1,1)
x , y
11 , -2
10 , 18

目标需求,合并数组结果
Arr(3,1)
x , y
12 , 33
10 , 18
36 , 33
11 , -2

谢谢各位大侠指教。
...全文
691 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxq19851204 2011-04-27
  • 打赏
  • 举报
回复
VBMAN V5
vbman2003 2011-04-27
  • 打赏
  • 举报
回复
吃好饭,再改下:

Option Explicit

Function Test(a As Variant, n As Long, Length As Long) As Boolean()

Dim minIdx As Long, maxIdx As Long
Dim i As Long
ReDim flag(Length) As Boolean

'找出第n列的最大最小值(如果可可知道数组的极值,这个循环可以省略)
For i = 1 To Length
If a(minIdx, n) > a(i, n) Then minIdx = i
If a(maxIdx, n) < a(i, n) Then maxIdx = i
Next
ReDim tmp(a(minIdx, n) To a(maxIdx, n)) As Long
'标志n列有重复的行
For i = 0 To Length
tmp(a(i, n)) = tmp(a(i, n)) + 1
If tmp(a(i, n)) > 1 Then
flag(i) = True
End If
Next
Test = flag

End Function


Private Sub Command1_Click()

Dim Length As Long
Dim i As Long
Dim Idx As Long

Dim Arr1(2, 1) As Long, Arr2(1, 1) As Long

Dim Bol1() As Boolean
Dim Bol2() As Boolean

'生成测试数组
Arr1(0, 0) = 12: Arr1(0, 1) = 33
Arr1(1, 0) = 10: Arr1(1, 1) = 18
Arr1(2, 0) = 36: Arr1(2, 1) = 33

Arr2(0, 0) = 11: Arr2(0, 1) = -2
Arr2(1, 0) = 10: Arr2(1, 1) = 18

'先将二个数组全部数据加入一个数组
Length = UBound(Arr1, 1) + UBound(Arr2, 1) + 1
ReDim Arr(Length, 1)
For i = 0 To UBound(Arr1, 1)
Arr(i, 0) = Arr1(i, 0)
Arr(i, 1) = Arr1(i, 1)
Next
Idx = i
For i = 0 To UBound(Arr2, 1)
Arr(i + Idx, 0) = Arr2(i, 0)
Arr(i + Idx, 1) = Arr2(i, 1)
Next
'分别测试各列的重复情况
Bol1 = Test(Arr, 0, Length)
Bol2 = Test(Arr, 1, Length)
'根据重复情况重新定义数组(可惜Redim Preserve不能修改一维,不然可少一个循环)
Idx = 0
For i = 0 To Length
If Not (Bol1(i) And Bol2(i)) Then
Idx = Idx + 1
End If
Next
'结果数组
ReDim Result(Idx, 1)
Idx = 0
For i = 0 To Length
If Not (Bol1(i) And Bol2(i)) Then
Result(Idx, 0) = Arr(i, 0)
Result(Idx, 1) = Arr(i, 1)
Idx = Idx + 1
End If
Next

'输出结果
For i = 0 To UBound(Result)
Debug.Print Result(i, 0); Result(i, 1)
Next

End Sub

不想了,不然没完没了....

vbman2003 2011-04-27
  • 打赏
  • 举报
回复
下班路上想了下,大概作下修改,对于a(x,2)这样的数组,对x最多作7次単循环:

Function Test(a As Variant, n As Long, Length As Long) As Boolean()

Dim minIdx As Long, maxIdx As Long
Dim i As Long
ReDim flag(Length) As Boolean

'找出第n列的最大最小值(如果可以知道数组的极值,这个循环可以省略)
For i = 1 To Length
If a(minIdx, n) > a(i, n) Then minIdx = i
If a(maxIdx, n) < a(i, n) Then maxIdx = i
Next
ReDim tmp(a(minIdx, n) To a(maxIdx, n)) As Long
'标志n列有重复的行
For i = 0 To Length
tmp(a(i, n)) = tmp(a(i, n)) + 1
If tmp(a(i, n)) > 1 Then
flag(a(i, 2)) = True
End If
Next
Test = flag

End Function


Private Sub Command1_Click()

Dim Length As Long
Dim i As Long
Dim Idx As Long

Dim Arr1(2, 1) As Long, Arr2(1, 1) As Long

Dim Bol1() As Boolean
Dim Bol2() As Boolean

'生成测试数组
Arr1(0, 0) = 12: Arr1(0, 1) = 33
Arr1(1, 0) = 10: Arr1(1, 1) = 18
Arr1(2, 0) = 36: Arr1(2, 1) = 33

Arr2(0, 0) = 11: Arr2(0, 1) = -2
Arr2(1, 0) = 10: Arr2(1, 1) = 18

'先将二个数组全部数据加入一个数组,第二维的第三个元素标志Index(通俗的说是行号)
Length = UBound(Arr1, 1) + UBound(Arr2, 1) + 1
ReDim Arr(Length, 2)
For i = 0 To UBound(Arr1, 1)
Arr(i, 0) = Arr1(i, 0)
Arr(i, 1) = Arr1(i, 1)
Arr(i, 2) = i
Next
Idx = i
For i = 0 To UBound(Arr2, 1)
Arr(i + Idx, 0) = Arr2(i, 0)
Arr(i + Idx, 1) = Arr2(i, 1)
Arr(i + Idx, 2) = Idx + i
Next
'分别测试各列的重复情况
Bol1 = Test(Arr, 0, Length)
Bol2 = Test(Arr, 1, Length)
'根据重复情况重新定义数组(可惜Redim Preserve不能修改一维,不然可少一个循环)
Idx = 0
For i = 0 To Length
If Not (Bol1(i) And Bol2(i)) Then
Idx = Idx + 1
End If
Next
'结果数组
ReDim Result(Idx, 1)
Idx = 0
For i = 0 To Length
If Not (Bol1(i) And Bol2(i)) Then
Result(Idx, 0) = Arr(i, 0)
Result(Idx, 1) = Arr(i, 1)
Idx = Idx + 1
End If
Next

'输出结果
For i = 0 To UBound(Result)
Debug.Print Result(i, 0); Result(i, 1)
Next

End Sub
vbman2003 2011-04-27
  • 打赏
  • 举报
回复
一个算法思路,下班前赶的,比较粗糙,看明白了自己完善:

Function Test(a As Variant, n As Long, Length As Long) As Boolean()

Dim minIdx As Long, maxIdx As Long
Dim i As Long, j As Long
Dim Idx As Long

'找出n维的最大最小值
For i = 1 To Length
If a(minIdx, n) > a(i, n) Then minIdx = i
If a(maxIdx, n) < a(i, n) Then maxIdx = i
Next
ReDim tmp(a(minIdx, n) To a(maxIdx, n)) As Long
'记录是否重复
For i = 0 To Length
tmp(a(i, n)) = tmp(a(i, n)) + 1
Next
'标志n维重复的行
ReDim flag(Length) As Boolean
For i = a(minIdx, n) To a(maxIdx, n)
j = Length
Do While tmp(i) > 1
If a(j, n) = i Then
flag(a(j, 2)) = True
tmp(i) = tmp(i) - 1
End If
j = j - 1
Loop
Next
Test = flag

End Function


Private Sub Command1_Click()

Dim Length As Long
Dim i As Long
Dim Idx As Long

Dim Arr1(2, 1) As Long, Arr2(1, 1) As Long

Dim Bol1() As Boolean
Dim Bol2() As Boolean

'生成测试数组
Arr1(0, 0) = 12: Arr1(0, 1) = 33
Arr1(1, 0) = 10: Arr1(1, 1) = 18
Arr1(2, 0) = 36: Arr1(2, 1) = 33

Arr2(0, 0) = 11: Arr2(0, 1) = -2
Arr2(1, 0) = 10: Arr2(1, 1) = 18

Length = UBound(Arr1, 1) + UBound(Arr2, 1) + 1
'先将全部数据加入一个数组,第二维的第三个元素标志Index(通俗的说是行号)
ReDim Arr(Length, 2)
For i = 0 To UBound(Arr1, 1)
Arr(i, 0) = Arr1(i, 0)
Arr(i, 1) = Arr1(i, 1)
Arr(i, 2) = i
Next
Idx = i
For i = 0 To UBound(Arr2, 1)
Arr(i + Idx, 0) = Arr2(i, 0)
Arr(i + Idx, 1) = Arr2(i, 1)
Arr(i + Idx, 2) = Idx + i
Next
'分别测试各维的重复情况
Bol1 = Test(Arr, 0, Length)
Bol2 = Test(Arr, 1, Length)
'根据重复情况重新定义数组
Idx = 0
For i = 0 To Length
If Bol1(i) And Bol2(i) Then
Arr(i, 2) = -1
Else
Idx = Idx + 1
End If
Next
'结果数组
ReDim Result(Idx, 1)
Idx = 0
For i = 0 To Length
If Arr(i, 2) <> -1 Then
Result(Idx, 0) = Arr(i, 0)
Result(Idx, 1) = Arr(i, 1)
Idx = Idx + 1
End If
Next

'输出结果
For i = 0 To UBound(Result)
Debug.Print Result(i, 0); Result(i, 1)
Next

End Sub
无·法 2011-04-27
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 supermanking 的回复:]

引用 15 楼 sysdzw 的回复:
引用 13 楼 supermanking 的回复:

你只是把循环处理的过程交由VB函数处理而已,并没有节省循环次数,甚至还增加
了循环次数,因为由普通的数值变成了多个ASCII码来对比,这样效率肯定会低的,
只是IsStr的过程不是明码看见而已。
这是我在VC里写的InStr的过程
C/C++ code

DWORD VB_InStr(……
[/Quote]MySQL Error
Message: MySQL Query Error
SQL: INSERT INTO uchome_friend (`uid`, `fuid`, `fusername`, `gid`, `note`, `dateline`) VALUES ('12859', '71837', 'SupermanKing', '1', '有机会多多交流', '1303896360')
Error: MySQL server has gone away
Errno.: 2006
Click here to seek help.
现在还是人类 2011-04-27
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 sysdzw 的回复:]
引用 13 楼 supermanking 的回复:

你只是把循环处理的过程交由VB函数处理而已,并没有节省循环次数,甚至还增加
了循环次数,因为由普通的数值变成了多个ASCII码来对比,这样效率肯定会低的,
只是IsStr的过程不是明码看见而已。
这是我在VC里写的InStr的过程
C/C++ code

DWORD VB_InStr(DWORD lpStart, char * ……
[/Quote]
我也只是看看我的坚持是否正确而已,难说你有别的理由是我不知道的可以驳倒我,那就又学到东西了,呵呵
我就记得以前有一次,那是我刚开始学单片机程序的时候,有一位网友和我辩驳 If 语句的效率问题,
当时我是用 if(A==1&&B==3) 这样的写法,他就告诉我如果做这种判断,尽量不要用&&来判断,效率
会变低的,我就不相信,后来和他辩驳了一番,最后,他拿出了反汇编代码,我才知道,&&的写法和两个
IF 语句的写法在汇编中代码量的确有区别,然而,汇编是最接近与机器语言的,所以我才接受了他的
说法,后来,只要有关效率的程序,我都会尽量采用多个If 的判断方法,不单是单片机,PC程序也如此。
所以有时候发现,即使是些小问题,如果不注意,可能会忽略他,每次遇到这种涉及效率的问题,我都
还挺关心的,如果有些意见看法不一,通常我都会尽量去搞清楚,很难说有些什么我不知道的理论支持
那些与我不同看法的说法。
无·法 2011-04-27
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 supermanking 的回复:]

你只是把循环处理的过程交由VB函数处理而已,并没有节省循环次数,甚至还增加
了循环次数,因为由普通的数值变成了多个ASCII码来对比,这样效率肯定会低的,
只是IsStr的过程不是明码看见而已。
这是我在VC里写的InStr的过程
C/C++ code

DWORD VB_InStr(DWORD lpStart, char * lpString1, char * lpString2)
……
[/Quote]说的也是,学习了。
ningyong58 2011-04-27
  • 打赏
  • 举报
回复
一个非常小的知识点,SupermanKing和sysdzw网友的精彩讲解。


1 SupermanKing网友的解法是通过数组循环的解法。
2 sysdzw网友的解法思路以前没有见过,学习了。
谢谢两位花时间所提供的帮助,增加和巩固所学知识点。

现在还是人类 2011-04-27
  • 打赏
  • 举报
回复
你只是把循环处理的过程交由VB函数处理而已,并没有节省循环次数,甚至还增加
了循环次数,因为由普通的数值变成了多个ASCII码来对比,这样效率肯定会低的,
只是IsStr的过程不是明码看见而已。
这是我在VC里写的InStr的过程

DWORD VB_InStr(DWORD lpStart, char * lpString1, char * lpString2)
{
DWORD i = 0;
DWORD j = 0;
DWORD isret = 0;
DWORD PrimaryLenB = VB_LenB(lpString1);
DWORD FindLenB = VB_LenB(lpString2);
DWORD WordCount = 0;
DWORD IsStart = 0;

for(i=0;i<PrimaryLenB;i++){
if(lpStart==WordCount){
IsStart = 1;
}
if(IsStart==1){
isret=1;
for(j=0;j<FindLenB;j++){
if(lpString1[i+j]!=lpString2[j]){
isret=0;
break;
}
}
if(isret==1){
WordCount++;
return WordCount;
break;
}
}
WordCount++;
if((BYTE)lpString1[i]>=0xA0){
//属于中文字符
i++;
}
}
return 0;
}

这个是我在VB下写的InStr过程

Function InStr_Array(ByVal funStart As Long, _
ByRef funBytes() As Byte, _
ByVal funFind As String) As Long
'==================== 变量定义 ====================
Dim byteFindArray() As Byte
Dim lngBytesCount As Long
Dim lngFindCount As Long
Dim lngIsFind As Long
Dim i As Long
Dim j As Long

On Error Resume Next ' 开始设置错误陷阱,防止程序发生意外错误而崩溃
'==================== 初始化变量 ====================
InStr_Array = -1

'==================== 校验输入参数 ====================
'---------- 校验搜索条件参数 ----------
If Len(funFind) = 0 Then
Exit Function
End If
'---------- 校验搜索内容参数 ----------
lngBytesCount = UBound(funBytes)
If Err.Number <> 0 Then
Err.Clear
Exit Function
End If
byteFindArray = StrConv(funFind, vbFromUnicode)
lngFindCount = UBound(byteFindArray)
'---------- 校验搜索位置参数 ----------
If funStart + lngFindCount > lngBytesCount Then
Exit Function
End If

'==================== 开始搜索数据 ====================
For i = funStart To lngBytesCount
lngIsFind = 1
For j = 0 To lngFindCount
If funBytes(i + j) < &HA0 And byteFindArray(j) < &HA0 Then
If UCase(Chr(funBytes(i + j))) <> UCase(Chr(byteFindArray(j))) Then
lngIsFind = 0
Exit For
End If
Else
If funBytes(i + j) <> byteFindArray(j) Then
lngIsFind = 0
Exit For
End If
End If
Next j
If lngIsFind = 1 Then
InStr_Array = i
Exit For
End If
Next i
End Function

你只是用了VB自带的函数而已,但这种循环查找过程是必不可少的,只是
这个过程思自己做还是用VB的而已。然而,将数值转换为字符串,轮询多
个字符串进行对比,这本身就加重了循环次数,而且还分配了额外的内存
交换数据,相对来说会降低效率,只是数据少感觉不大而已,如果数据量大,
单用一个字符串变量要存储那么多转换后的字符串数据,很容易内存溢出,
而且效率也会降低。
虽然代码上看上去是少了,但是实际的CPU操作来说绝对是增大了。
无·法 2011-04-27
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 supermanking 的回复:]

VB code

Private Declare Function GetTickCount Lib "kernel32" () As Long

Private Type POINTAPI
x As Long
y As Long
End Type

Private Sub Command1_Click()
Dim Array1() As POINTAP……
[/Quote]修改下,虽然用了字符串但是我觉得速度不会慢,算法复杂度O(n):
Private Declare Function GetTickCount Lib "kernel32" () As Long

Private Type POINTAPI
x As Long
y As Long
End Type

Private Sub Command1_Click()
Dim Array1() As POINTAPI
Dim Array2() As POINTAPI
Dim Array3() As POINTAPI
Dim lngArray1Count As Long
Dim lngArray2Count As Long
Dim lngAddCount As Long
Dim IsRepeated As Long
Dim i As Long
Dim j As Long
Dim StartCount As Long
Dim EndCount As Long

ReDim Array1(2)
ReDim Array2(1)

Array1(0).x = 12
Array1(0).y = 33
Array1(1).x = 10
Array1(1).y = 18
Array1(2).x = 36
Array1(2).y = 33

Array2(0).x = 11
Array2(0).y = -2
Array2(1).x = 10
Array2(1).y = 18

StartCount = GetTickCount

Dim strKey$, lngCount&
strKey = " "
For i = 0 To UBound(Array1)
If InStr(strKey, " " & Array1(i).x & "," & Array1(i).y & " ") = 0 Then
ReDim Preserve Array3(lngCount)
Array3(lngCount) = Array1(i)
lngCount = lngCount + 1
strKey = strKey & Array1(i).x & "," & Array1(i).y & " "
End If
Next

For i = 0 To UBound(Array2)
If InStr(strKey, " " & Array2(i).x & "," & Array2(i).y & " ") = 0 Then
ReDim Preserve Array3(lngCount)
Array3(lngCount) = Array2(i)
lngCount = lngCount + 1
strKey = strKey & Array2(i).x & "," & Array2(i).y & " "
End If
Next

EndCount = GetTickCount

'输出
Debug.Print "耗时:" & EndCount - StartCount & " 毫秒"
For i = 0 To UBound(Array3)
Debug.Print Array3(i).x & "," & Array3(i).y
Next i
End Sub
现在还是人类 2011-04-27
  • 打赏
  • 举报
回复
数据量不大不好测速
现在还是人类 2011-04-27
  • 打赏
  • 举报
回复
结果
耗时:0 毫秒
12,33
10,18
36,33
11,-2
现在还是人类 2011-04-27
  • 打赏
  • 举报
回复

Private Declare Function GetTickCount Lib "kernel32" () As Long

Private Type POINTAPI
x As Long
y As Long
End Type

Private Sub Command1_Click()
Dim Array1() As POINTAPI
Dim Array2() As POINTAPI
Dim lngArray1Count As Long
Dim lngArray2Count As Long
Dim lngAddCount As Long
Dim IsRepeated As Long
Dim i As Long
Dim j As Long
Dim StartCount As Long
Dim EndCount As Long

ReDim Array1(2)
ReDim Array2(1)

Array1(0).x = 12
Array1(0).y = 33
Array1(1).x = 10
Array1(1).y = 18
Array1(2).x = 36
Array1(2).y = 33

Array2(0).x = 11
Array2(0).y = -2
Array2(1).x = 10
Array2(1).y = 18

StartCount = GetTickCount

'先剔除自身重复数据
DelRepeated Array1
DelRepeated Array2
lngArray1Count = UBound(Array1)
lngArray2Count = UBound(Array2)
lngAddCount = lngArray1Count
ReDim Preserve Array1(lngArray1Count + lngArray2Count + 1)

For i = 0 To lngArray2Count
IsRepeated = 0
For j = 0 To lngArray1Count
If Array2(i).x = Array1(j).x Then
If Array2(i).y = Array1(j).y Then
IsRepeated = 1
Exit For
End If
End If
Next j
If IsRepeated = 0 Then
lngArray1Count = lngArray1Count + 1
Array1(lngArray1Count).x = Array2(i).x
Array1(lngArray1Count).y = Array2(i).y
End If
Next i
ReDim Preserve Array1(lngArray1Count)
EndCount = GetTickCount

'输出
Debug.Print "耗时:" & EndCount - StartCount & " 毫秒"
For i = 0 To UBound(Array1)
Debug.Print Array1(i).x & "," & Array1(i).y
Next i
End Sub
Private Sub DelRepeated(ByRef tmpArray() As POINTAPI)
Dim i As Long
Dim j As Long
Dim k As Long
Dim lngArrayCount As Long
lngArrayCount = UBound(tmpArray)
For i = 0 To lngArrayCount - 1
For j = i + 1 To lngArrayCount
If tmpArray(i).x = tmpArray(j).x Then
If tmpArray(i).y = tmpArray(j).y Then
If j < lngArrayCount Then
For k = j To lngArrayCount
tmpArray(j).x = tmpArray(k).x
tmpArray(j).y = tmpArray(k).y
Next k
End If
tmpArray(lngArrayCount).x = 0
tmpArray(lngArrayCount).y = 0
lngArrayCount = lngArrayCount - 1
End If
End If
Next j
Next i
ReDim Preserve tmpArray(lngArrayCount)
End Sub

无·法 2011-04-27
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 ningyong58 的回复:]

好多问题没有说清楚,要求是X,Y重复。
instr(s,Arr1(i,j))=0不成立,
理由是x值和y值都有重复值。

目标数组有两个33
x , y
12 , 33
10 , 18
36 , 33
11 , -2
[/Quote][Quote=引用 6 楼 ningyong58 的回复:]

好多问题没有说清楚,要求是X,Y重复。
instr(s,Arr1(i,j))=0不成立,
理由是x值和y值都有重复值。

目标数组有两个33
x , y
12 , 33
10 , 18
36 , 33
11 , -2
[/Quote]“instr(s,Arr1(i,j))=0不成立”,那就是固定的两列数据了,可以写成:
instr(s,Arr1(i,0) & "," & Arr1(i,1))=0
如果是固定的不妨就搞成1维数组。
数组1 Arr1(2)
12 , 33
10 , 18
36 , 33
数组2 Arr2(1)
11 , -2
10 , 18
现在还是人类 2011-04-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sysdzw 的回复:]
直接循环的话涉及到一个数据保存的问题,用redim也比较耗时间的,干脆处理好后专门转成数组。
[/Quote]
开始就分个大空间不就OK了,然后再缩小,就两次 Redim,
而且操作时就用原来的数组操作,这样会比多弄个数组要快
ningyong58 2011-04-27
  • 打赏
  • 举报
回复
好多问题没有说清楚,要求是X,Y重复。
instr(s,Arr1(i,j))=0不成立,
理由是x值和y值都有重复值。

目标数组有两个33
x , y
12 , 33
10 , 18
36 , 33
11 , -2
无·法 2011-04-27
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 supermanking 的回复:]

引用 2 楼 sysdzw 的回复:
循环解决。
你只是说道数组间重复,不知道数组内重复是不是一样的处理。建议将数据都保存到一个整字符串中。
if instr(s,Arr1(i,j))=0 then s=s & Arr1(i,j) & " ",最终:
s="12,33 10,18 36 , 33 11,-2"

然后将split(s," "),然后逐一赋值到Arr3中……
[/Quote]直接循环的话涉及到一个数据保存的问题,用redim也比较耗时间的,干脆处理好后专门转成数组。
dbcontrols 2011-04-27
  • 打赏
  • 举报
回复
这是个苦力活
现在还是人类 2011-04-27
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 sysdzw 的回复:]
循环解决。
你只是说道数组间重复,不知道数组内重复是不是一样的处理。建议将数据都保存到一个整字符串中。
if instr(s,Arr1(i,j))=0 then s=s & Arr1(i,j) & " ",最终:
s="12,33 10,18 36 , 33 11,-2"

然后将split(s," "),然后逐一赋值到Arr3中去。
[/Quote]
这样效率会降低哟,直接循环数组还快,毕竟数值运算要比字符串快
无·法 2011-04-27
  • 打赏
  • 举报
回复
[Quote=引用楼主 ningyong58 的回复:]
数组1 Arr1(2,1)
x , y
12 , 33
10 , 18
36 , 33
数组2 Arr2(1,1)
x , y
11 , -2
10 , 18

目标需求,合并数组结果
Arr(3,1)
x , y
12 , 33
10 , 18
36 , 33
11 , -2

谢谢各位大侠指教。
[/Quote]循环解决。
你只是说道数组间重复,不知道数组内重复是不是一样的处理。建议将数据都保存到一个整字符串中。
if instr(s,Arr1(i,j))=0 then s=s & Arr1(i,j) & " ",最终:
s="12,33 10,18 36 , 33 11,-2"

然后将split(s," "),然后逐一赋值到Arr3中去。
加载更多回复(1)

7,765

社区成员

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

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