ioripalm 发表于 2013-2-28 16:50:46

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

本帖最后由 ioripalm 于 2013-3-6 10:35 编辑

比如有个数组 $avarray有100个元素,我想提取索引25-55的元素组成一个新的数组,有这样的函数直接生成吗?
我现在是用for循环+_ArrayAdd来生成新数组。觉得麻烦!

happytc 发表于 2013-2-28 17:19:52

回复 1# ioripalm


    函数,就是这样写成的吗?
对自己没有信心,觉得自己写的不如别人写成的现成函数好?

happytc 发表于 2013-2-28 17:43:15

本帖最后由 happytc 于 2013-2-28 17:49 编辑

估计你喜欢象这种的

#include <Array.au3>
Local $aArray = ['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 = 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

ioripalm 发表于 2013-2-28 19:31:23

回复 3# happytc

感觉比我那个还复杂 算了!

Qokelate 发表于 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
        Return $aArray
EndFunc   ;==>FuncA

难道是这样?

xms77 发表于 2013-2-28 20:03:11

回复 5# Qokelate
这样也行,就是通用性不好。

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

waynew 发表于 2013-3-1 09:34:58

代码易懂容易维护就是好的。

netegg 发表于 2013-3-2 12:00:03

本帖最后由 netegg 于 2013-3-2 12:03 编辑

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

dim $aA
redim $aA
$aA = _arrayreverse($aA)
redim $aA
$aA = _arrayreverse($aA)

ioripalm 发表于 2013-3-2 12:37:02

回复 9# netegg


    果然厉害,谢谢!

afan 发表于 2013-3-2 13:07:22

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

dim $aA
redim $aA[ ...
netegg 发表于 2013-3-2 12:00 http://www.autoitx.com/images/common/back.gif


    蛋蛋这两种方法都是不错的思路。

happytc 发表于 2013-3-2 19:23:57

回复 10# ioripalm


    不嫌复杂,不嫌长了?
因为在#Include里,看不到了,哈%……

ioripalm 发表于 2013-3-2 20:57:02

回复 12# happytc


    的确是这样,简单的语句好记,而且思路可以长见识!
页: [1]
查看完整版本: [已解决]如何提取数组里的一部分到一新数组?