找回密码
 加入
搜索
查看: 5069|回复: 3

[效率算法] 如何知道数组中出现次数最多的值是哪个?

[复制链接]
发表于 2011-4-2 22:28:37 | 显示全部楼层 |阅读模式
悬赏5金钱已解决
【第一种情况】一维数组,存储的数据有10000个,为: 张三、王二、赵武、丽丽、花花、赵武、花花、王二、王二、花花、王二、王二、花花、赵武、张三、张三、王二、赵武、丽丽、花花、赵武、花花、王二、王二、花花、王二、王二、花花、赵武、张三、张三、王二、赵武、丽丽、花花、赵武、花花、王二、王二、花花、王二、王二、花花、赵武、张三、张三、王二、赵武、丽丽、花花、赵武、花花、王二、王二、花花、王二、王二、花花、赵武、张三、张三、王二、赵武、丽丽、花花、赵武、花花、王二、王二、花花、王二、王二、花花、赵武、张三、张三、王二、赵武、丽丽、花花、赵武、花花、王二、王二、花花、王二、王二、花花、赵武、张三、张三、王二、赵武、丽丽、花花、赵武、花花、王二、王二、花花、王二、王二、花花、赵武、张三…………………………………………

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


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

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

最佳答案

查看完整内容

还没有学会搜索. 这类问题回答过好几回了 http://www.autoitx.com/forum.php?mod=redirect&goto=findpost&ptid=23183&pid=281535&fromuid=7639113 还是给个源码,二维数组的统计类似. [au3]#include #include local $array[10000],$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 ...
发表于 2011-4-2 22:28:38 | 显示全部楼层
本帖最后由 3mile 于 2011-4-2 23:46 编辑

还没有学会搜索.
这类问题回答过好几回了
http://www.autoitx.com/forum.php ... amp;fromuid=7639113
还是给个源码,二维数组的统计类似.
#include <array.au3>
#include <file.au3>
 
local $array[10000],$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[UBound($a_Arr)][2]
        for $i=0 to UBound($a_Arr)-1
                $out_array[$i][0]=$a_Arr[$i]
                $out_array[$i][1]=$b_Arr[$i]
        Next
EndIf
return $out_array;返回重复次数的二维数组,0列是数组的傎,1列是重复的次数
EndFunc

发表于 2011-4-15 18:31:18 | 显示全部楼层
学习了,我一般都是用excel操作的
发表于 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)
第二种情况,用个函数先删掉一维

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-12 02:45 , Processed in 0.076450 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表