【Azure Developer】使用PowerShell Where-Object方法过滤多维ArrayList时候,遇见的诡异问题 -- 当查找结果只有一个对象时,返回结果修改了对象结构,把多维变为一维
2022-03-30 20:56
1261 查看
问题描述
编写PowerShell脚本,以多维(3维)数组中第二维度的值进行过滤,并打印出结果
#三维数组源数据 “A”, “11”, “Cheng Du” “B”, “21”, “Chong Qing” “C”, “31”, “Shang Hai” “D”, “41”, “Bei Jing” “E”, “51”, “Nan Jing” #从地址中过滤以Chong开头的地区, 结果需要为 B, 21, Chong Qing
PowerShell脚本为:
$CityList = [System.Collections.ArrayList]::new() $CityList.Add(@(“A”,“11”,“Cheng Du”)) | Out-Null $CityList.Add(@(“B”,“21”,“Chong Qing”)) | Out-Null $CityList.Add(@(“C”,“31”,“Shang Hai”)) | Out-Null $CityList.Add(@(“D”,“41”,“Bei Jing”)) | Out-Null $CityList.Add(@(“E”,“51”,“Nan Jing”)) | Out-Null Write-Host "==== 开始过滤 Chong ==== " -ForegroundColor DarkYellow $FinalCityList = $CityList | Where-object -filterScript {$_[2] -like "Chong*"} Write-Host "Final City List 类型" -ForegroundColor Green $FinalCityList.GetType() Write-Host "Final City 数量为: " $FinalCityList.Count -ForegroundColor Green Write-Host "" Write-Host "==== 循环打印List中所有元素结果 ==== " -ForegroundColor DarkYellow foreach( $aaa in $FinalCityList) { Write-Host $aaa[0]','$aaa[1]','$aaa[2] } Write-Host "" Write-Host "==== 直接输出对象的结果 ==== " -ForegroundColor red $FinalCityList
输出结果 :当过滤结果大于1时,显示正常,当过滤结果为1时,结果显示异常。结果变成了一个一位数组,Count结果为3。
这是为什么呢?
问题分析
从 $FinalCityList 的打印结果分析,当 Where-Object 查看到结果只有一个的时候,就把结果对象进行了多维到一维的转换。所以结果变为了一个包含三行内容的一位数组。
问题解决
$FinalCityList = @($CityList | Where-object -filterScript {$_[2] -like "Chong*"})
把 Where-Object 方法用 @() 进行对象转换即可。
完整的PowerShell脚本为:
$CityList = [System.Collections.ArrayList]::new() $CityList.Add(@(“A”,“11”,“Cheng Du”)) | Out-Null $CityList.Add(@(“B”,“21”,“Chong Qing”)) | Out-Null $CityList.Add(@(“C”,“31”,“Shang Hai”)) | Out-Null $CityList.Add(@(“D”,“41”,“Bei Jing”)) | Out-Null $CityList.Add(@(“E”,“51”,“Nan Jing”)) | Out-Null foreach( $ccc in $CityList) { Write-Host $ccc[0]','$ccc[1]','$ccc[2] } Write-Host "==== 开始过滤 CityList 中包含 Chong 的城市 ==== " -ForegroundColor Yellow $FinalCityList = @($CityList | Where-object -filterScript {$_[2] -like "Chong*"}) Write-Host "Final City List 类型" -ForegroundColor Green $FinalCityList.GetType() Write-Host "Final City 数量为: " $FinalCityList.Count -ForegroundColor Green Write-Host "" Write-Host "==== 循环打印List中所有元素结果 ==== " -ForegroundColor DarkYellow foreach( $aaa in $FinalCityList) { Write-Host $aaa[0]','$aaa[1]','$aaa[2] } Write-Host "" Write-Host "==== 直接输出对象的结果 ==== " -ForegroundColor red $FinalCityList
参考文档
What does the "@" symbol do in PowerShell?:https://stackoverflow.com/questions/363884/what-does-the-symbol-do-in-powershell
相关文章推荐
- 解决Hibernate查找视图有一个空值的时候返回的对象为null的问题
- 存储过程中使用RETURN语句返回数值,.Net里用ExecuteScalar方法结果将会导致一个未引用到具体对象的异常
- 关于form使用form.submit()提交的一个问题,提示form.submit不是对象的方法属性
- 深入分析使用mysql_fetch_object()以对象的形式返回查询结果
- Java - 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- 解决 ”不允许在查询中显式构造实体类型“问题及使用其他方法实现返回 List<Model对象>或者IQueryable<Model对象>对象
- Web项目中使用NLog记录日志,利用单件模式控制整个项目只有一个Logger对象的问题
- java面试题:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- 0-1背包问题,使用动态规划的三种方法(二维数组,两个一维数组,一个一维数组)python实现
- vfork 挂掉的一个问题拓展实验一 (子进程使用return返回时候的栈帧)
- PHP使用mysql_fetch_object从查询结果中获取对象集的方法
- 使用session时候,遇到的一个问题(请求解决方法)
- 2017-6-14 关于使用history.go的问题!配合原生应用嵌入H5页面(只有一个webview的的单页应用)返回历史列表记录的问题
- Python3基础 __str__ print一个类的实例对象的时候 使用的魔法方法
- 阿里巴巴 Java 开发手册:asList 的返回对象是一个 Arrays 内部类,并没有实现集合的修改方法
- 当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- java面试题解惑:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
- 11_5_3给people添加GetOldest()方法,使用上面定义的重载运算符,返回一个Age最大的对象数组
- Hibernate查询,返回new对象(注意这个新定义的类要有构造函数),使用sql带条件分页查询并且把结果显示到一个对象的集里面的解决方案
- 深入分析使用mysql_fetch_object()以对象的形式返回查询结果