如何在Powershell中将数组中的每个元素与多个其他数组中的每个元素组合

贾斯汀

在Powershell中,我试图结合多个数组的元素来创建唯一字符串数组。我需要将每个数组中的每个元素与其他数组中的每个元素组合在一起。很难简明地解释我的意思,因此可能更容易展示。

我从看起来像这样的二维数组开始:

$array = @('this', ('A','B','C'), ('1','2','3','4'), 'that')

我需要创建一个数组,其内容将如下所示:

thisA1that
thisA2that
thisA3that
thisA4that
thisB1that
thisB2that
thisB3that
thisB4that
thisC1that
thisC2that
thisC3that
thisC4that

原始数组中数组的长度和数量是可变的,而且我不知道原始数组中项目的顺序。

到目前为止,我已经尝试了几种方法,但是我的逻辑是错误的。这是我第一次尝试解决方案:

$tempList = @()

#get total number of resources that will be created
$total = 1
for($i=0; $i -lt $array.Count; $i++){$total = $total * $array[$i].Count}

# build each resource from permutations of array parts
for ($i = 0; $i -lt $array.Count; $i++)
{

    for ($j = 0; $j -lt $total; $j++)
    {
        $tempList += @('')
        $idx = $total % $array[$i].Count
        # item may either be string or an array. If string, just add it. If array, add the item at the index
        if ($array[$i] -is [array]){ $tempList[$j] += $array[$i][$idx] }
        else { $tempList[$j] += $array[$i] }
    }

}

在此示例中,我使用模数运算符的逻辑是错误的,因此它每次都会获取每个数组的唯一第一个索引。经过进一步考虑,即使我确定了模数逻辑,整体逻辑仍然是错误的。例如,如果后两个数组的大小相同,则每次将“ A”与“ 1”配对,将“ B”与“ 2”配对,依此类推。

我敢肯定有办法做到这一点,但我似乎根本看不到它。

约翰·贝文

我认为答案是使用递归,这样您就可以处理以下事实:数组的数组可以是任意长度。此递归函数应:

  • 从数组数组中取出第一个数组
  • 遍历第一个数组中的每个项目
  • 如果第一个数组也是最后一个数组,则只需返回每个项目。
  • 如果数组中有更多的数组,则将其余的数组传递给递归函数
  • 对于递归函数的每个结果,请在返回值前加上第一个数组中的当前项。

我认为代码比上面的解释更好:

function Combine-Array {
    [CmdletBinding()]
    Param (
        [string[][]]$Array
    )
    Process {
        $current = $Array[0]
        foreach ($item in $current) {
            if ($Array.Count -gt 1) {
                Combine-Array ([string[][]]@($Array | Select -Skip 1)) | %{'{0}{1}' -f $item, $_}
            } else {
                $item
            }
        }
    }
}

Combine-Array  @('this', ('A','B','C'), ('1','2','3','4'), 'that')

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

javascript - 如何将数组中的每个元素与不同数组中的其他元素合并?

如何在Scala中将每个元素与列表中的其他元素进行深度比较(可选fileds)

如何在数组中添加其他数组的元素

如何在if语句js中获取数组中的每个元素

如何在scala中将字母添加到数组中的每个元素

如何在python中的任意数组中将每个元素除以一个数字?

如何在中断之前检查数组中的每个元素

如何在条件之后删除数组中的每个元素?

如何在firestore中获取数组的每个元素

计算numpy数组中每个其他元素的增量内有多少个元素

将数组中的每个元素与其他所有元素进行比较

如何保持数组中每个元素的类型

如何将列表中的字典集中的每个元素组合到其他字典列表中?

将数组中的每个元素拆分为多个数组

将 Numpy 数组中的每个元素与同一数组中的其他元素进行比较的高效算法

如何在 JQuery 中将多个元素插入到数组中?

循环可观察数组,并与每个元素的其他可观察数组合并

如何在python列表中的每个其他元素之后插入一个元素

在迭代每个元素时如何从值中减去数组元素?

如何从数组B中获取数组A的每个元素的最近邻

如何将RDD中的每个元素与RDD中的每个其他元素进行比较?

如何找到多维数组中每个元素的所有唯一组合

单个数组可在每个元素中存储多个变量

如何检查数组中的每个元素以查看它是否存在于另一个数组中,并将第一个数组中的元素替换为其他元素?

如何在不遍历数组的情况下对数组中的每个元素调用方法?

如何将数组的每个元素与其他元素进行比较?

如何从C中未知长度的数组中打印每个元素

如何将数组中的每个元素与列表中的每个元素进行比较?

Javascript将数组项与其他数组中的每个项组合为文本