VB 数组中去掉相同的数
现在要做的就是里面的数中会有相同的,需要把相同的去掉,只留下一个.然后还要给出最后剩下的数的个数.
不明白的请留言.以前老师教VC的时候教过,可是我学习不专心,几年了,现在不记得怎么弄了,懒得找书了.知道的教一下. 展开
具体思路:
实现2次循环,一个数组循环2次,外循环数组,得出一个值a,然后内循环,将a与自身所在的数组的值对比一次,计算出现次数或者设置为空,如果计算出现次数可以计算次数大于2时候,进行删除操作。如果设置为空,等于进行删除操作。
具体代码如下:
Option Explicit
Function Delete3(Arr As Variant) As Variant
Dim i As Integer
For i = LBound(Arr) To UBound(Arr)
If i > UBound(Arr) Then Exit For //累计器大于数组长度,退出循环
If Arr(i) = 3 Then
Do
Dim j As Integer
For j = i To UBound(Arr) - 1 //数组从新赋值
Arr(j) = Arr(j + 1)
Next j
If LBound(Arr) = UBound(Arr) Then
Delete3 = Empty //删除相同元素
Exit Function
End If
ReDim Preserve Arr(LBound(Arr) To UBound(Arr) - 1)
//从新定义数组长度
If i > UBound(Arr) Then Exit For //累计器大于数组长度,退出循环
Loop While Arr(i) = 3
End If
Next i
Delete3 = Arr
End Function
Sub Test()
Delete3 (Array(3, 3, 3, 3, 1, 3, 7, 3, 3, 3, 9, 3, 3))
End Sub
测试结果:验证方式通过计算删除元素后的数组长度确认实现功能,输入了Array(3, 3, 3, 3, 1, 3, 7, 3, 3, 3, 9, 3, 3),长度为13(从1开始算),删除后长度为3,而且只有3个元素是不重复的。说明功能正常。
Dim cflag() As Boolean, c() As Integer
Rem 在此处得到C的具体元素及其个数,以下为示例
'**********************************
m = 20
ReDim cflag(1 To m), c(1 To m)
a = LBound(c)
b = UBound(c)
Randomize
Text1 = ""
Text2 = ""
For i = a To b
c(i) = Int(10 * Rnd)
Text1 = Text1 & " " & c(i)
Next
'***********************************
Rem 去同
For i = a To b - 1
If cflag(i) = False Then
For j = i + 1 To b
If c(i) = c(j) Then cflag(j) = True
Next
End If
Next
Rem 显示
n = 0
For i = a To b
If cflag(i) = False Then
n = n + 1
Text2 = Text2 & " " & c(i)
End If
Next
Print n '剩余个数
End Sub
0分,我也懒的写了,虽然很简单