xiaochuan 发表于 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后面??请求帮助~~~
已解决,多谢众位~~~

veket_linux 发表于 2012-6-24 22:21:04

没有现成函数......... 自己分析一下 ........写个排序..........

找出 1- 打头的第一个和最后一个的数组下标p1、p2
下标从p1到p2 排序
1-后面的字符转成数字 数字1到11 ,冒泡、选择................

xiaochuan 发表于 2012-6-24 22:22:22

回复 2# veket_linux

好的,我试试,看起来挺繁琐~~~

ooxxgod 发表于 2012-6-25 01:51:33

这个麻烦点哦

shqf 发表于 2012-6-25 09:29:31

楼主给出的数据中,“-”后面是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~~~')

netegg 发表于 2012-6-25 09:58:21

#Include <GuiListView.au3>
_GUICtrlListView_SortItems的示例里有两种(按字符,按数字)模式的排序

shqf 发表于 2012-6-25 09:59:25

本帖最后由 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~~~')加上“]”了。

xms77 发表于 2012-6-25 11:36:52

回复 7# shqf
很好学习了,感谢分享!
BTW,”

xms77 发表于 2012-6-25 11:38:32

回复 6# netegg
还是元老对UDF函数了解深刻啊!

xiaochuan 发表于 2012-6-25 12:16:09

回复 6# netegg

这个可以有,多谢蛋蛋~~{:face (310):}

xiaochuan 发表于 2012-6-25 12:17:44

回复 7# shqf


思路太牛×,学习了,多谢shqf,{:face (310):}

3mile 发表于 2012-6-25 13:00:13

来个另类的
支持 数字 符号 数字 的方式
比如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

xiaochuan 发表于 2012-6-25 15:41:08

回复 12# 3mile

挺高深,我先吸收一下,多谢~~~~{:face (310):}

fhqbbfcu2050 发表于 2012-6-26 14:52:11

看下呢。。。。这怎么排我也不知道

leon460 发表于 2012-6-27 09:08:36

都是高人,,正则表达式哦
页: [1] 2
查看完整版本: 求助:关于数组元素排序的问题,谢谢~~ [已解决]