.Simba 发表于 2021-5-14 00:08:13

搜索数组里的子数组某一个值[已解决]

本帖最后由 .Simba 于 2021-5-14 18:38 编辑

#include <Array.au3>

Local $aTemp =
Local $arrayA = [['a', 'a'], ['b', 'b'], ['c', $aTemp]]
_ArrayDisplay($arrayA, '$arrayA')
我要怎么用 _ArraySearch() 搜索 $arrayA 里的子数组里的某一个值呢?   比如我要搜索 $aTemp 里的 3 . 帮助文档里没有看明白.

数据格式设计不合理


绿色风 发表于 2021-5-14 05:35:29

在你的二维数组中,$aTemp是个对象标记,不是你$aTemp内的值,_ArraySearch() 函数的搜索也只针对字符串。

afan 发表于 2021-5-14 10:26:41

_ArraySearch() 不能搜索这种元素也为数组的
如果 $aTemp 在 $arrayA 中的位置固定,可以直接 _ArraySearch($aTemp, '3') 搜索
如果位置不确定,那就不要设计这样的组合数组

.Simba 发表于 2021-5-14 18:37:52

afan 发表于 2021-5-14 10:26
_ArraySearch() 不能搜索这种元素也为数组的
如果 $aTemp 在 $arrayA 中的位置固定,可以直接 _ArraySearc ...

好的, 看来这种设计不合理, 我本想设计成数组中套数组的.

heroxianf 发表于 2021-5-15 15:14:12

afan 发表于 2021-5-14 10:26
_ArraySearch() 不能搜索这种元素也为数组的
如果 $aTemp 在 $arrayA 中的位置固定,可以直接 _ArraySearc ...

这个问题很久以前我也想过, 但是不知道如何在初始化的时候把数据整理成数组中有数组, 是否要边判断边插入数据.很是麻烦的样子. 不过查找数据当时我只研究二维数组. 下面代码的逻辑有问题, 比如我要查找 $aTempD 中的 b 键值中的 data 值,本应该返回 $aTempA 这个数组, 结果却返回 $aTempA 中 data 键的值: GoodTime

#include <Array.au3>

Local $aTempA = [['name', '$aTempA'], ['data', 'GoodTime']]
Local $aTempB = [['name', '$aTempB'], ['data', $aTempA]]
Local $aTempC = [['name', '$aTempC'], ['data', $aTempB]]
Local $aTempD = [['a', 'av'], ['b', $aTempB], ['c', $aTempC]]

_Example()

Func _Example()
        Local $s = _Time_ArraySearch($aTempD, 'b.data.name') ; c.data.name 这是当时设计读取的格式
        MsgBox(0, '', $s)

        Local $ss = _Time_ArraySearch($aTempB, 'data.name')
        MsgBox(0, '', $ss)

EndFunc   ;==>_Example

Func _Time_ArraySearch($array, $s)
        Local $Temp
        Local $aData = $array
        Local $sData = $s

        Local $aTemp = StringSplit($sData, '.', 2)
        If @error Then
                $Temp = __ArraySearch($aData, $sData)

        Else
                For $i = 0 To UBound($aTemp) - 1
                        $aData = __ArraySearch($aData, $aTemp[$i])
                        If IsArray($aData) Then
                                $Temp = __ArraySearch($aData, $aTemp[$i])
                        Else
                                $Temp = $aData
                        EndIf
                Next
        EndIf

        Return $Temp
EndFunc   ;==>_Time_ArraySearch

Func __ArraySearch($array, $s) ;这里可以再添加一个参数, 用来设置返回第几列的值
        $x = _ArraySearch($array, $s)
        If Not @error Then Return $array[$x]

        Return 'Null'
EndFunc   ;==>__ArraySearch









.Simba 发表于 2021-5-15 15:26:00

heroxianf 发表于 2021-5-15 15:14
这个问题很久以前我也想过, 但是不知道如何在初始化的时候把数据整理成数组中有数组, 是否要边判断边插入 ...

谢谢,感觉修改一下就可以达到我的需求了!

heroxianf 发表于 2021-5-15 16:36:20

.Simba 发表于 2021-5-15 15:26
谢谢,感觉修改一下就可以达到我的需求了!

如果你的数据格式有一维和二维, 要加一些判断.
页: [1]
查看完整版本: 搜索数组里的子数组某一个值[已解决]