[已解决]求个快速的算法:查找数组内缺少的插入一行。
本帖最后由 ioripalm 于 2013-11-28 07:26 编辑正常情况下,数组大小
如下:
Row Col0 Col1
255
1 CM1
2 dm2
3 kc1
4 mc1
5 qc1
6 df1
7 gl2
[.] . xx.
省略
[.] . xx.
[.] . xx.
255 xxx
非正常情况下,数组大小
Row Col0 Col1
X
1 CM1
2 dm2
3 kc1
5 qc1
6 df1
7 gl2
8 cc1
[.] . xx.
省略
[.] . xx.
[.] . xx.
255 xxx
数组的Col1是1-255的自然数(代表IP最后一段),Col2是计算机名,每个计算机名都是和IP对应的,不能错位
也就是说非正常情况下,数组的数据会少几个,具体少哪几个不知道。
有没有什么算法可以找到少的那几个,然后将少的添加到应在的位置,让数组保持正常状态。由于不知道计算机名,也就只能添加Col1,Col2可以留空。
效果如下:
Row Col0 Col1
255
1 CM1
2 dm2
3 kc1
4
5 qc1
6 df1
7 gl2 看来是个固定元素的二维数组,对电脑来说,重新赋值256个元素的二维数组应该不是什么难事~
#include <array.au3>
Dim $ip
_Def()
_ArrayDisplay($ip, "初次赋值数组")
_ArrayDelete($ip, 8)
_ArrayDisplay($ip, "删掉一组元素后数组")
For $i = 0 To 255
If $ip[$i] <> $i Then _Def()
Next
_ArrayDisplay($ip, "检测后重新赋值数组")
Func _Def()
ReDim $ip
$ip = 255
$ip = ""
For $i = 1 To $ip
$ip[$i] = $i
$ip[$i] = "IP" & $i
Next
EndFunc ;==>_Def 才两百来个,确实像发哥这样以“序号”检测吧。大数据应该用数据库。 本帖最后由 ioripalm 于 2013-11-22 19:26 编辑
回复 2# haijie1223
老大,COL1下面IP1不一定是IP1的,是随机的计算机名。
要是固定的这样,就好弄了。 回复 4# ioripalm
那就把元素换成计算机名就是了~ 回复 5# haijie1223
怎么换呢?我重新编辑了问题,帮忙看下!我觉得你那个脚本只能解决计算机名是“IP+地址”这样的情况,实际是每个地址对应的计算机名是不一样的,不能错位。少的补上IP,留空计算机名。 回复 6# ioripalm
是啊,每台计算机对应一个ip,只要路由器不重启,一般情况下不会错位的,建议程序运行之前,先扫描一下网络,把ip和计算机名对应一下,把对应的数据放入数组,不就转化成我的代码功能了么~~ 回复 7# haijie1223
别把问题复杂化啊,又弄什么路由器了?情况就是上面的数组,缺少的行加进去,就这么简单,如果这个数组不是ip和计算机名呢?是个员工号对应工资表呢?我举例说ip是为了形象化一些!
就是单纯的拿第二个数组下手,排列为第一个数组那样。 Dim $a = [,,,,,,,,,,]
;~#include <Array.au3>
;~_ArrayDisplay($a, '')
Local $sArr = '', $sArrAdd = '', $iX = 0, $i
For $i = 1 To UBound($a) - 1
$iX += 1
If $a[$i] = $iX Then
$sArr &= $a[$i] & '|' & $a[$i] & @LF
Else
$i -= 1
$sArr &= $iX & '|' & @LF
$sArrAdd &= $iX & ','
EndIf
Next
MsgBox(0, '补足', $sArr)
MsgBox(0, '缺位', $sArrAdd) 回复 8# ioripalm
哦,那你应该提前说清楚了,可能是IP,可能是员工号,可能是工资表,可能是姓名,可能是性别,可能是年龄,可能是。。。问题的解决方法不止一种,当然是具体问题具体对待了。既然你举例是IP,那当然要拿IP进行讨论。总的来说,还是那个思路,提前把数组写好了,然后遍历检查就好了~ 感谢A饭有一次解决了我的问题,每次都是A到成功啊!
页:
[1]