找回密码
 加入
搜索
查看: 7109|回复: 15

[AU3基础] 求助:关于数组元素排序的问题,谢谢~~ [已解决]

 火.. [复制链接]
发表于 2012-6-24 22:13:10 | 显示全部楼层 |阅读模式
本帖最后由 xiaochuan 于 2012-6-25 12:20 编辑


求助:关于数组元素排序的问题,如上图,谢谢~~

比如数组中的元素(字符串):

1-1
1-2
1-3
……
1-9
1-11

用_ArraySort函数排序后,1-1 然后就是1-11,如何让1-11排序到1-9后面??请求帮助~~~
已解决,多谢众位~~~

本帖子中包含更多资源

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

×

评分

参与人数 1金钱 +10 收起 理由
afan + 10 感谢主动将修改帖子分类为[已解决],请继续 ...

查看全部评分

发表于 2012-6-24 22:21:04 | 显示全部楼层
没有现成函数......... 自己分析一下 ........写个排序..........

找出 1- 打头的第一个和最后一个的数组下标p1、p2
下标从p1到p2 排序
1-后面的字符转成数字 数字1到11 ,冒泡、选择................
 楼主| 发表于 2012-6-24 22:22:22 | 显示全部楼层
回复 2# veket_linux

好的,我试试,看起来挺繁琐~~~
发表于 2012-6-25 01:51:33 | 显示全部楼层
这个麻烦点哦
发表于 2012-6-25 09:29:31 | 显示全部楼层
楼主给出的数据中,“-”后面是1位或2 位数,且没有0,如此可用以下代码:
#include <Array.au3>
Local $array[10] = ["1-1", "1-11", "1-2", "1-3", "1-9", "2-1", "2-2", "3-1", "3-2", "3-3"]
$str = _ArrayToString($array)
$str = StringRegExpReplace($str, "-(\d\|)|-(\d)$", "-0$1$2")
$Array=StringSplit($str,"|",2)
_ArraySort($Array)
$str = _ArrayToString($array)
$str = StringRegExpReplace($str, "-0", "-")
$array=StringSplit($str,"|",2)
_ArrayDisplay($array,'Debug~~~')
发表于 2012-6-25 09:58:21 | 显示全部楼层
#Include <GuiListView.au3>
_GUICtrlListView_SortItems的示例里有两种(按字符,按数字)模式的排序
发表于 2012-6-25 09:59:25 | 显示全部楼层
本帖最后由 shqf 于 2012-6-25 12:08 编辑

呵呵,修改了一下,以下代码适合“-”后面是10位数以内的:
#include <Array.au3>
Local $array[10] = ["1-1", "1-1154", "1-2", "1-312", "1-9", "2-1234567", "2-2", "3-2", "3-1", "3-3"]
_ArrayDisplay($Array,'Debug~~~')
$str = _ArrayToString($array)
$str = StringRegExpReplace($str, "-", "-000000000")
$str = StringRegExpReplace($str, "-0+(\d{10})", "-$1")
$Array=StringSplit($str,"|",2)
_ArraySort($Array)
$str = _ArrayToString($array)
$str = StringRegExpReplace($str, "-0+", "-")
$array=StringSplit($str,"|",2)
_ArrayDisplay($array,'Debug~~~')
加上“]”了。
发表于 2012-6-25 11:36:52 | 显示全部楼层
回复 7# shqf
很好学习了,感谢分享!
BTW,[code少了个“]”
发表于 2012-6-25 11:38:32 | 显示全部楼层
回复 6# netegg
还是元老对UDF函数了解深刻啊!
 楼主| 发表于 2012-6-25 12:16:09 | 显示全部楼层
回复 6# netegg

这个可以有,多谢蛋蛋~~
 楼主| 发表于 2012-6-25 12:17:44 | 显示全部楼层
回复 7# shqf


思路太牛×,学习了,多谢shqf,
发表于 2012-6-25 13:00:13 | 显示全部楼层
来个另类的
支持 数字 符号 数字 的方式
比如21-09,43*4
#include <Array.au3>
Local $array[15] = ["1-1", "1-11", "1-2", "1-3", "1-9", "2-1", "2-2", "3-1", "3-2", "3-3",'100-99','0002*847', "1-1154", "1-312", "2-1234567"]
$a=_arraysort_s($array)
_ArrayDisplay($a)

Func _arraysort_s($arr)
Local $max
For $i=0 To UBound($arr)-1
        If StringLen($arr[$i])>$max Then $max=StringLen($arr[$i])
Next

For $i=0 To UBound($arr)-1
        $before='%0'&$max&'d-%0'&$max&'d'
        If $arr[$i]='' Then ContinueLoop
        $arr[$i]=StringFormat($before,StringRegExpReplace($arr[$i],'[^\d]\d+',''),StringRegExpReplace($arr[$i],'\d+[^\d]',''))
Next
_ArraySort($arr)

For $i=0 To UBound($arr)-1
        $before='%01d-%01d'
        If $arr[$i]='' Then ContinueLoop
        $arr[$i]=StringFormat($before,StringRegExpReplace($arr[$i],'[^\d]\d+',''),StringRegExpReplace($arr[$i],'\d+[^\d]',''))
Next

Return($arr)
EndFunc
 楼主| 发表于 2012-6-25 15:41:08 | 显示全部楼层
回复 12# 3mile

挺高深,我先吸收一下,多谢~~~~
发表于 2012-6-26 14:52:11 | 显示全部楼层
看下呢。。。。这怎么排我也不知道
发表于 2012-6-27 09:08:36 | 显示全部楼层
都是高人,,正则表达式哦
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-30 07:32 , Processed in 0.092955 second(s), 27 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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