找回密码
 加入
搜索
查看: 2132|回复: 6

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

[复制链接]
发表于 2021-5-14 00:08:13 | 显示全部楼层 |阅读模式
本帖最后由 .Simba 于 2021-5-14 18:38 编辑
#include <Array.au3>

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

数据格式设计不合理


发表于 2021-5-14 05:35:29 | 显示全部楼层
在你的二维数组中,$aTemp是个对象标记,不是你$aTemp内的值,_ArraySearch() 函数的搜索也只针对字符串。
发表于 2021-5-14 10:26:41 | 显示全部楼层
_ArraySearch() 不能搜索这种元素也为数组的
如果 $aTemp 在 $arrayA 中的位置固定,可以直接 _ArraySearch($aTemp, '3') 搜索
如果位置不确定,那就不要设计这样的组合数组
 楼主| 发表于 2021-5-14 18:37:52 | 显示全部楼层
afan 发表于 2021-5-14 10:26
_ArraySearch() 不能搜索这种元素也为数组的
如果 $aTemp 在 $arrayA 中的位置固定,可以直接 _ArraySearc ...

好的, 看来这种设计不合理, 我本想设计成数组中套数组的.
发表于 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][1]

        Return 'Null'
EndFunc   ;==>__ArraySearch







 楼主| 发表于 2021-5-15 15:26:00 来自手机 | 显示全部楼层
heroxianf 发表于 2021-5-15 15:14
这个问题很久以前我也想过, 但是不知道如何在初始化的时候把数据整理成数组中有数组, 是否要边判断边插入 ...

谢谢,感觉修改一下就可以达到我的需求了!
发表于 2021-5-15 16:36:20 | 显示全部楼层
.Simba 发表于 2021-5-15 15:26
谢谢,感觉修改一下就可以达到我的需求了!

如果你的数据格式有一维和二维, 要加一些判断.
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-4-26 16:59 , Processed in 0.073436 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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