求助:关于数组元素排序的问题,谢谢~~ [已解决]
本帖最后由 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- 打头的第一个和最后一个的数组下标p1、p2
下标从p1到p2 排序
1-后面的字符转成数字 数字1到11 ,冒泡、选择................ 回复 2# veket_linux
好的,我试试,看起来挺繁琐~~~ 这个麻烦点哦 楼主给出的数据中,“-”后面是1位或2 位数,且没有0,如此可用以下代码:#include <Array.au3>
Local $array = ["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~~~') #Include <GuiListView.au3>
_GUICtrlListView_SortItems的示例里有两种(按字符,按数字)模式的排序 本帖最后由 shqf 于 2012-6-25 12:08 编辑
呵呵,修改了一下,以下代码适合“-”后面是10位数以内的:#include <Array.au3>
Local $array = ["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~~~')加上“]”了。 回复 7# shqf
很好学习了,感谢分享!
BTW,” 回复 6# netegg
还是元老对UDF函数了解深刻啊! 回复 6# netegg
这个可以有,多谢蛋蛋~~{:face (310):} 回复 7# shqf
思路太牛×,学习了,多谢shqf,{:face (310):} 来个另类的
支持 数字 符号 数字 的方式
比如21-09,43*4
#include <Array.au3>
Local $array = ["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
回复 12# 3mile
挺高深,我先吸收一下,多谢~~~~{:face (310):} 看下呢。。。。这怎么排我也不知道 都是高人,,正则表达式哦
页:
[1]
2