arrays - 将字符串数组拆分为最大大小的块
问题描述
我试图确保将一个未知长度的数组拆分为一个或多个数组,其中最多包含 20 个元素。
我四处搜索并找到了几个基于包含数字序列的数组的类似问题的答案(或者我可能只是遗漏了一些东西),但对于字符串数组却一无所获。
我想出了一个解决方案,但它似乎有点令人费解,我觉得它可能会更好。
例如,拿这个数组 -
$metricDefinitionsHash= [ordered]@{"this one" = "111"; "that one" = "222"; "another one" = "333"}
为了这个例子,也就是说我最多只需要两个元素 -
$metricsQueryParts = @()
$counter = 0
$metricDefinitionsHash.Keys | ForEach-Object {
$index = [System.Math]::Floor($counter / 2)
if ($metricsQueryParts.Length -eq $index)
{
$metricsQueryParts += ""
$metricsQueryParts[$index] = @()
}
$metricsQueryParts[$index] += $_
$counter++
}
所以现在我有一个数组数组 -
@(@("this one", "that one"), @("another one"))
但是……我能以更有效的方式实现我的目标吗?
解决方案
使用for
循环、范围运算符 ( ..
) 和一元数组构造运算符 ( ,
):
[array]$keys = $metricDefinitionsHash.Keys
$size = 3
$metricsQueryParts = @()
for ($i=0; $i -lt $keys.Count; $i+=$size) {
$metricsQueryParts += ,$keys[$i..($i+$size-1)]
}
[array]$keys
将键/值集合.Keys
转换为通用数组(以便可以在其上使用索引运算符)。
该表达式$i..($i+$size-1)
为您提供从 $i 到索引 before 的索引$i+$size
,即$size
数组中从 position 开始的下一个元素$i
。如果元素数量少于$size
元素,则表达式将仅给出剩余的元素数量。
一元数组构造运算符确保将其作为嵌套数组$keys[...]
附加,而不是仅仅连接两个数组。$metricsQueryParts
推荐阅读
- google-chrome - Chrome.storage 跨标签同步
- c# - 在 C# 中使用 EF 进行查询中的多个 Where 子句
- bash - bash:等待进程替换子shell完成
- reactjs - 是否可以在 Redux Form 的辅助函数中分配 initialValues?
- reactjs - 如何在本地运行 react-beautiful-dnd 示例?
- python - 熊猫:功能转变:“模棱两可的真值”
- python - 如何使用数据框将这些嵌套的 for 循环压缩为 python 中的列表理解?
- r - 在R中将表与一些重叠的行名组合起来
- python - 使用 elasticsearch_dsl 将 json 转换为 python 类
- ios - 主细节项目 - 从细节中删除主单元格