找回密码
 加入
搜索
查看: 5499|回复: 12

[AU3基础] [已解决]如何提取数组里的一部分到一新数组?

  [复制链接]
发表于 2013-2-28 16:50:46 | 显示全部楼层 |阅读模式
本帖最后由 ioripalm 于 2013-3-6 10:35 编辑

比如有个数组 $avarray有100个元素,我想提取索引25-55的元素组成一个新的数组,有这样的函数直接生成吗?
我现在是用for循环+_ArrayAdd来生成新数组。觉得麻烦!
发表于 2013-2-28 17:19:52 | 显示全部楼层
回复 1# ioripalm


    函数,就是这样写成的吗?
对自己没有信心,觉得自己写的不如别人写成的现成函数好?
发表于 2013-2-28 17:43:15 | 显示全部楼层
本帖最后由 happytc 于 2013-2-28 17:49 编辑

估计你喜欢象这种的

#include <Array.au3>
Local $aArray[8] = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
Local $aRes = _ExtractSubArray($aArray, 1, 4)
_ArrayDisplay($aRes)

Func _ExtractSubArray(ByRef $aArray, $iStart, $iEnd, $iFlag = 0)
        Local $iCount = 0
        If Not IsArray($aArray) Then Return SetError(1, 1, 0)
        If Not (IsInt($iStart) And IsInt($iEnd) And $iStart >= 0 And $iEnd >=0) Then Return SetError(2, 2, 0)
        If $iStart > $iEnd Then Return SetError(3, 3, 0)
        If $iFlag Then
                Local $aSub[$iEnd - $iStart + 2]
                $aSub[0] = UBound($aSub) - 1
                For $i = $iStart To $iEnd
                        $iCount += 1
                        $aSub[$iCount] = $aArray[$i]
                Next
        Else
                Local $aSub[$iEnd - $iStart + 1]
                For $i = $iStart To $iEnd
                        $aSub[$iCount] = $aArray[$i]
                        $iCount += 1
                Next
        EndIf        
        Return $aSub
EndFunc
 楼主| 发表于 2013-2-28 19:31:23 | 显示全部楼层
回复 3# happytc

感觉比我那个还复杂 算了!
发表于 2013-2-28 19:48:07 | 显示全部楼层
本帖最后由 Qokelate 于 2013-2-28 19:52 编辑


#include <Array.au3>

Local $szStr = 'askdfjsajdfjsaklfjaskjfklasjfdjasklfjlaskjflksajflkasfasfasfdasfasdfasdfasfasofjklasdfmlsamfklasjfjasfdasfsa;sjfasjkfjasfasf'

Local $aTemp = StringSplit($szStr, '', 3)

Local $aReDim = FuncA($aTemp)

_ArrayDisplay($aReDim)


Exit

Func FuncA($aArray)
        For $a = 25 To 55
                $aArray[$a - 25] = $aArray[$a]
        Next
        ReDim $aArray[31]
        Return $aArray
EndFunc   ;==>FuncA

难道是这样?
发表于 2013-2-28 20:03:11 | 显示全部楼层
回复 5# Qokelate
这样也行,就是通用性不好。
发表于 2013-2-28 20:12:18 | 显示全部楼层
本帖最后由 Qokelate 于 2013-2-28 20:17 编辑

回复 6# xms77


    3楼那个兼容好的,人家嫌复杂


Func ExtractSubArray(ByRef $aArray, $iStart = 0, $iEnd = Default, $iStep = 1)
        If Default = $iEnd Then $iEnd = UBound($aArray, 1) - 1
        If $iEnd < $iStart Then $iStep = -1
        Local $iNewBound = Abs($iEnd - $iStart) + 1
        Local $aNewArray[$iNewBound]
        Local $iCount = 0
        For $a = $iStart To $iEnd Step $iStep
                $aNewArray[$iCount] = $aArray[$a]
                $iCount += 1
        Next
        Return $aNewArray
EndFunc   ;==>ExtractSubArray
发表于 2013-3-1 09:34:58 | 显示全部楼层
代码易懂容易维护就是好的。
发表于 2013-3-2 12:00:03 | 显示全部楼层
本帖最后由 netegg 于 2013-3-2 12:03 编辑

$string = _arraytostring($aA,'|',25,55)
$aA2=stringsplit($string,'|',2)

dim $aA[100]
redim $aA[54]
$aA = _arrayreverse($aA)
redim $aA[29]
$aA = _arrayreverse($aA)

评分

参与人数 1金钱 +30 收起 理由
afan + 30

查看全部评分

 楼主| 发表于 2013-3-2 12:37:02 | 显示全部楼层
回复 9# netegg


    果然厉害,谢谢!
发表于 2013-3-2 13:07:22 | 显示全部楼层
$string = _arraytostring($aA,'|',25,55)
$aA2=stringsplit($string,'|',2)

dim $aA[100]
redim $aA[ ...
netegg 发表于 2013-3-2 12:00



    蛋蛋这两种方法都是不错的思路。
发表于 2013-3-2 19:23:57 | 显示全部楼层
回复 10# ioripalm


    不嫌复杂,不嫌长了?
因为在#Include里,看不到了,哈%……
 楼主| 发表于 2013-3-2 20:57:02 | 显示全部楼层
回复 12# happytc


    的确是这样,简单的语句好记,而且思路可以长见识!
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-9-29 11:28 , Processed in 0.084217 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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