dingcool 发表于 2017-4-22 19:48:27

排列数组 为什么99会大于100[已解决]

本帖最后由 dingcool 于 2017-4-22 22:58 编辑

#include <Array.au3>
_arraysort($fscjall,1)
结果会这样

dingcool 发表于 2017-4-22 19:48:51

真头痛~~~~~~~

kk_lee69 发表于 2017-4-22 21:57:11

回复 2# dingcool


    文字排列法    99 大於 100

dingcool 发表于 2017-4-22 22:05:56

回复 3# kk_lee69


    如何改成数字排列呢~~~~~~~

dingcool 发表于 2017-4-22 22:07:34

自己想了个临时解决方法,效率慢,凑合用吧Func arraysort($fscjall)

        If _ArrayMax($fscjall) < 90 Then
                _ArraySort($fscjall)
                Return $fscjall
        EndIf
       
        For $i = 0 To UBound($fscjall) - 1
                For $j = 0 To UBound($fscjall) - 1 - 1 - $i

                       
                       
                        $a = StringSplit($fscjall[$j], ".")
                        $b = StringSplit($fscjall[$j + 1], ".")
                       

                       
                        If StringLen($a) < StringLen($b) Then
                               
                               
                                ;ConsoleWrite($fscjall[$j] & ">" & $fscjall[$j + 1] & @CRLF)
                                $temp0 = $fscjall[$j];
                                $temp1 = $fscjall[$j];
                               
                                $fscjall[$j] = $fscjall[$j + 1]
                                $fscjall[$j] = $fscjall[$j + 1]
                               
                                $fscjall[$j + 1] = $temp0
                                $fscjall[$j + 1] = $temp1
                                ContinueLoop
                               
                        EndIf
                       
                       
                        If StringLen($a) < StringLen($b) Then
                                ContinueLoop
                        EndIf
                       
                       
                       
                        If StringLen($a) == StringLen($b) Then
                               
                                If $fscjall[$j] < $fscjall[$j + 1] Then
                                        ;        ConsoleWrite($fscjall[$j] & "= >" & $fscjall[$j + 1] & @CRLF)
                                        $temp0 = $fscjall[$j];
                                        $temp1 = $fscjall[$j];
                                       
                                        $fscjall[$j] = $fscjall[$j + 1]
                                        $fscjall[$j] = $fscjall[$j + 1]
                                       
                                        $fscjall[$j + 1] = $temp0
                                        $fscjall[$j + 1] = $temp1
                                Else
                                        ContinueLoop
                                EndIf
                               
                               
                        EndIf
                       
                       
                Next
        Next
        Return $fscjall
EndFunc   ;==>arraysort

kk_lee69 发表于 2017-4-22 22:14:12

本帖最后由 kk_lee69 于 2017-4-22 22:21 编辑

回复 5# dingcool
有 善用 搜索嗎??

http://www.autoitx.com/forum.php?mod=viewthread&tid=25156&highlight=%5C_arraysort

http://www.autoitx.com/forum.php?mod=viewthread&tid=34469&highlight=arraysort

kk_lee69 发表于 2017-4-22 22:19:28

回复 5# dingcool

某 前輩的一段話~~~
先将文件名中的数字统一在其左边补0到一指定的最大位数,(比如5位:1-10.txt 补0后 00001-00010.txt)
再用 _ArraySort() 排序

dingcool 发表于 2017-4-22 22:55:10

Func _LeftArraysort($fscjall)

        If _ArrayMax($fscjall) > 90 Then
               
                For $j = 0 To UBound($fscjall) - 1
                       
                        $a = StringSplit($fscjall[$j], ".")
                        If StringLen($a) == 2 And StringLen($a) < 3 Then $fscjall[$j] = "0" & $fscjall[$j]
                       
                Next
               
        EndIf

可以是可以了 总是感觉前面多个0难看,看来排完序还要去判断第一个是否为0 删除掉


        _ArraySort($fscjall, 1)
        Return $fscjall

EndFunc

dingcool 发表于 2017-4-22 22:59:31

另外将数据强制转换成数字再排序autoit有这方面的函数吗

double() float()

kk_lee69 发表于 2017-4-22 23:57:34

你的 數組 資料怎麼來的??

kk_lee69 发表于 2017-4-23 00:02:54

回复 9# dingcool

剛剛給你的範例裡面蛋大

不是說了試一下 以下的範例

#include <Array.au3>
Local $test =
_arraysort($test,0)
_ArrayDisplay($test)

所以結論應該是你的 數組 來源是甚麼
如果從來源下手.....進入數組的時候 是 數字 不就解決問題了嗎??

h20040606 发表于 2017-4-23 06:11:54

你的数组里的数值是文本吧(字符串)

dingcool 发表于 2017-4-23 18:31:29

回复 11# kk_lee69

感谢,主要这些数据是服务器返回的 都是文本 对本文进行整理 获得的数字再比较

其本质还是字符串所以比大小出现上述问题 我的数据量不大
1 判读字符串长度
2或者刚才说的左侧填充0
    都可以解决,感谢 !

kk_lee69 发表于 2017-4-23 19:05:25

回复 13# dingcool

試試看將數組

FOR   NEXT

然後用 Number 轉換一次 重新回填

或者 將 數組內容直接 +0 後 回填

在做排序動作

zghwelcome 发表于 2017-4-24 10:30:15

学习了。排序原来有这么多注意点
页: [1]
查看完整版本: 排列数组 为什么99会大于100[已解决]