222222 发表于 2011-4-2 22:28:37

如何知道数组中出现次数最多的值是哪个?

【第一种情况】一维数组,存储的数据有10000个,为: 张三、王二、赵武、丽丽、花花、赵武、花花、王二、王二、花花、王二、王二、花花、赵武、张三、张三、王二、赵武、丽丽、花花、赵武、花花、王二、王二、花花、王二、王二、花花、赵武、张三、张三、王二、赵武、丽丽、花花、赵武、花花、王二、王二、花花、王二、王二、花花、赵武、张三、张三、王二、赵武、丽丽、花花、赵武、花花、王二、王二、花花、王二、王二、花花、赵武、张三、张三、王二、赵武、丽丽、花花、赵武、花花、王二、王二、花花、王二、王二、花花、赵武、张三、张三、王二、赵武、丽丽、花花、赵武、花花、王二、王二、花花、王二、王二、花花、赵武、张三、张三、王二、赵武、丽丽、花花、赵武、花花、王二、王二、花花、王二、王二、花花、赵武、张三…………………………………………

假设出现次数最多的是王二,请问如何用AU3统计出这个结果?


【第二种情况】二维数组,存储的数据有20000个,为
1    张三
2    王二
3   李四
4   赵武
5    王二
6    宋刀
……

需要知道第二列里出现次数最多的是哪个,怎么用AU3进行统计呢?

3mile 发表于 2011-4-2 22:28:38

本帖最后由 3mile 于 2011-4-2 23:46 编辑

还没有学会搜索.
这类问题回答过好几回了
http://www.autoitx.com/forum.php?mod=redirect&goto=findpost&ptid=23183&pid=281535&fromuid=7639113
还是给个源码,二维数组的统计类似.
#include <array.au3>
#include <file.au3>

local $array,$result,$time
for $i=0 to UBound($array)-1
        $array[$i]="Item-"&random(1,100,1)
Next
$time=TimerInit()
$result=_array_repeat($array)
_ArrayDisplay($result,TimerDiff($time))

func _array_repeat($array)
local $o_Dic=objcreate("scripting.dictionary");创建字典项目
local $k=1,$out
for $i=0 to UBound($array)-1
      if Not $o_Dic.exists($array[$i]) then ;判断KEY是否存在
                $o_Dic($array[$i]);增加新Key
                $o_Dic.item($array[$i])=$k;定义Item
      Else
                $k=$o_Dic.item($array[$i])+1;得到重复次数
                $o_Dic.item($array[$i])=$k;将重复次数修改为ITEM
                $out&=$array[$i]&@CRLF;已经丢弃
      EndIf
Next
$a_Arr=$o_Dic.keys
$b_Arr=$o_Dic.items

if UBound($a_Arr)=UBound($b_Arr) Then
      local $out_array
      for $i=0 to UBound($a_Arr)-1
                $out_array[$i]=$a_Arr[$i]
                $out_array[$i]=$b_Arr[$i]
      Next
EndIf
return $out_array;返回重复次数的二维数组,0列是数组的傎,1列是重复的次数
EndFunc

love5173 发表于 2011-4-15 18:31:18

学习了,我一般都是用excel操作的

netegg 发表于 2011-4-15 19:11:05

本帖最后由 netegg 于 2011-4-15 19:27 编辑

第一种情况#include<array.au3>
Local $string = '张三,王二,赵武,丽丽,花花,赵武,花花,王二,王二,花花,王二,王二,花花,赵武,张三,张三,王二,赵武,丽丽,花花,赵武,花花,王二,王二,花花,王二,王二,花花,赵武,张三,张三,王二,赵武,丽丽,花花,赵武,花花,王二,王二,花花,王二,王二,花花,赵武,张三,张三,王二,赵武,丽丽,花花,赵武,花花,王二,王二,花花,王二,王二,花花,赵武,张三,张三,王二,赵武,丽丽,花花,赵武,花花,王二,王二,花花,王二,王二,花花,赵武,张三,张三,王二,赵武,丽丽,花花,赵武,花花,王二,王二,花花,王二,王二,花花,赵武,张三,张三,王二,赵武,丽丽,花花,赵武,花花,王二,王二,花花,王二,王二,花花,赵武,张三'
Local $aR = StringSplit($string, ',', 2)
$aR1 = _arrayunique($aR)
_arraydelete($aR1, 0)
Dim $string= ''
For $i In $aR1
        $string &= $i &'|'& ubound(_arrayfindall($aR, $i)) & @cr
Next
msgbox(0,0,$string)如果只要最大值需要改下...
Local $aR = StringSplit($string, ',', 2)
$aR1 = _arrayunique($aR)
_arraydelete($aR1, 0)
Dim $max= 0
For $i In $aR1
if ubound(_arrayfindall($aR, $i))> $max then
   $value = $i
   $max = ubound(_arrayfindall($aR, $i))
endif
Next
msgbox(0,0,$value &'|'&$max)第二种情况,用个函数先删掉一维
页: [1]
查看完整版本: 如何知道数组中出现次数最多的值是哪个?