嵌套的 For-Each 会变平吗?

2023-12-09

有一个对象数组,其中每个对象都有一个对象集合,其中每个对象都有一个字符串属性。当我进行嵌套迭代时:

$TheArray | %{$_.TheCollection | %{$_.TheProperty}}

看起来我最终得到的不是字符串数组的数组,而是一维字符串数组。这是设计使然吗?那is首先是期望的行为,但完全出乎意料。


  • PowerShell by default enumerates (unrolls) collections[1] when outputting them to the pipeline: that is, instead of outputting the collection itself, its elements are output, one by one.

  • 电源外壳将管道中的所有输出对象收集到平面数组中(类型[object[]],即一个数组,其元素可以是任何类型(System.Object)), if 两个或更多输出对象(asingle对象被收集本身).

因此,即使输出multiple数组创建一个single,默认情况下平面输出数组,这是级联这些数组。

一个更简单的例子:

# Output 2 2-element arrays.
PS> 1..2 | % { @(1, 2) } | Measure-Object | % Count
4  # i.e., @(1, 2, 1, 2).Count

为了生产nested数组,你必须抑制枚举,可以通过两种方式实现:

  • 最简单的选择:将输出数组包装在辅助瞬态单元阵列这样当 PowerShell 枚举 aux.数组其唯一的元素 - 原始数组 - 是输出作为一个整体, as a 单个对象。这可以通过以下方式实现一元形式, the 数组构造函数(“逗号”)运算符:
# Use unary , to wrap the RHS in a transient single-element array,
# which ensures that @(1, 2) is output *as a whole*.
PS> 1..2 | % { , @(1, 2) } | Measure-Object | % Count
2  # i.e., @(@(1, 2), @(1, 2)).Count
  • 替代方案,使用Write-Output -NoEnumerate(PSv4+;这更慢,但概念上更明确):
PS> 1..2 | % { Write-Output -NoEnumerate @(1, 2) } | Measure-Object | % Count
2  # i.e., @(@(1, 2), @(1, 2)).Count

Note:

  • While use of @(...) is not strictly necessary to create array literals (as used above) - for literals, separating elements with , is sufficient[2] - you still need @(...) to ensure that output from enclosed expressions or commands is treated as an array, in case only a single object happens to be output.

[1] Specifically, types that implement the System.Collections.IEnumerable interface or its generic counterpart are enumerated, but there are a few exceptions, notably strings and dictionaries. See the bottom section of this answer for details.

[2] E.g., 1, 2 creates a two-element array. In the case of nesting such an array via unary ,, you do need an enclosure, however, to clarify precedence, for which the general-purpose (...) (grouping operator) would suffice: , (1, 2) - though you may prefer , @(1, 2) for conceptual clarity.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

嵌套的 For-Each 会变平吗? 的相关文章

随机推荐

  • Swift 中根据属性删除数组对象

    我有一个像这样的自定义数组 我想删除学生 ID 为 4 的元素 var strNames Student id 1 name ghj Student id 4 name def Student id 9 name bkl 以经典的方式 我确
  • JSON 数据 - 已解析或“评估”

    从安全角度来看 我认为简单地对传入的 JSON 数据进行 评估 是一个严重错误 如果你得到像下面这样的数据 你就会遇到一些问题 someData function alert i m in ur code hackin ur page 我想
  • 多次具有相同键的红黑树:将集合存储在节点中还是将它们存储为多个节点?

    显然你可以做任何一个 但前者更常见 您为什么选择后者 它是如何运作的 我读到了这个 http www drdobbs com cpp stls red black trees 184410531 这让我觉得他们做到了 它说 insert a
  • R 将每日数据与刻度数据合并

    感谢您指向 na locf Darren 更新的示例和结果如下 我有报价数据 我已将其汇总到每日数据中 以便计算每日波动性 现在我已经创建了每日波动率 我想再次将每日数据与报价数据合并 但是 我怀疑由于每日数据和分时数据的索引差异 合并仍然
  • numpy读取带有复数的.csv

    堆栈溢出 我有一个包含复数的矩阵 例如 2 2982235934153075E 11 2 1179547211742553E 9i 我需要将其导入到numpy数组中 我一直在使用genfromtext file 解析我所有其他的真实值 但我
  • 发生了错误。请联系您的系统管理员。 (6632) Jasper 服务器 6.2 中出现错误

    我正在使用 Jasper 报告 TIBCO Jaspersoft Studio 6 2 0 final Jasper 服务器 JasperReports Server 社区版 v6 2 0 我将报告书模板 Jasper 报告发布到 Jasp
  • 将 CURL 转换为 URLRequest

    我正在尝试将 Swagger 给我的以下卷曲请求转换为 URLRequest curl X GET header Accept application json header Authorization key ttn account v2
  • 从系统帐户为用户创建 ServiceAccountCredential

    我使用以下代码通过系统登录 域范围内的身份验证 代表用户进行操作 我发现实现此目的的唯一示例使用反射来设置用户 我知道这不是完成此任务的正确方法 所以我想知道是否有人可以帮助我举一个如何解决此问题的示例 ServiceAccountCred
  • 如何在 Python 中的类之间创建共享类属性

    我昨天问过这个问题 但我把我的问题写得太糟糕了 当我意识到我输入的内容时 所有回复都是针对我没有的另一个措辞错误的问题的解决方案 抱歉上次的愚蠢输入 我有两个类 我希望它们能够共享一个公共列表 而不必将其作为参数传递 我还想创建一个方法来打
  • 在 Angular.js 中的控制器之间共享资源

    简单的问题 我有这个资源 var Company resource company id id id 我想在不同的控制器之间共享 现在 我正在复制粘贴内容 但我仍然没有达到我想要添加更多代码并使用的程度角度共享服务 还有其他选择吗 只需放入
  • 在 Python 中获取从周日开始的周数时出现问题?

    我正在使用 Python 3 6 并且在获取从周日开始的周数时遇到问题 如何在 Python 中找到从周日开始的周数 t1 datetime datetime now t1 strftime U 例如 关于09 16 2018 Sunday
  • 如何在 React 中使用 Materialize CSS 的 sideNav?

    我正在使用 React 开发一个应用程序 我想使用 sidenav 组件http materializecss com side nav html 问题是我收到此错误 Sidebar js 8 Uncaught TypeError WEBP
  • python 中的符号“=”和“==”是什么意思?

    什么时候应该使用符号 什么时候只使用符号 就足够了 python 中的符号 是什么意思 两周前我开始了 python 编码 这两个符号有时让我感到困惑 有几次当我使用 时 我会收到一条错误消息 我将其更改为 后 不再有错误消息 看来当 起作
  • 安装 Window Azure 存储包时出现问题

    我在安装 Azure 存储时遇到以下问题 通过 Nuget 打包 Attempting to resolve dependency Microsoft Data OData 5 6 2 Attempting to resolve depen
  • 高度:100% VS 最小高度:100%

    我用这个css设置一个 div 至最大高度 谁能给我一个一般性的答案 两者有什么区别height 100 and min height 100 这是 W3C 的解释 link The following algorithm describe
  • 使用扭矩稳定气垫船刚体直立

    我目前正在创建一款涉及悬停自行车的游戏 当自行车与物体碰撞时 它的角度会自然改变 我希望创建某种方法让它趋于 0 这是我尝试过的 if hoverbike rotation x 0 hoverbike rotation z 0 hoverb
  • Pandas-在保留列/索引值的同时向 DataFrame 添加缺失的日期?

    我有一个 pandas 数据框 其中包含日期 客户 商品以及购买的美元价值 date customer product amt 1 1 2017 tim apple 3 1 1 2017 jim melon 2 1 1 2017 tom a
  • 淘汰赛可排序绑定顺序

    这是一个问题的后续 KnockoutJS 可按字段对 observableArray 进行排序并进行条件排序 我还有两件事正在努力实现 首先 当嵌套列表项被拖动到另一个列表时 父级为空 我想删除父级 我通过创建一个 afterMove 函数
  • 何时使用MyISAM和InnoDB? [复制]

    这个问题在这里已经有答案了 MyISAM 的设计理念是 您的数据库被查询的次数远远多于其被更新的次数 因此它执行非常快的读取操作 如果您的读写 插入 更新 比率低于 15 那么最好使用 MyISAM InnoDB 使用行级锁定 具有提交 回
  • 嵌套的 For-Each 会变平吗?

    有一个对象数组 其中每个对象都有一个对象集合 其中每个对象都有一个字符串属性 当我进行嵌套迭代时 TheArray TheCollection TheProperty 看起来我最终得到的不是字符串数组的数组 而是一维字符串数组 这是设计使然