我对 PowerShell 还很陌生,并且正在尝试创建一些组合在一起的函数来创建和管理数组。我在使这些功能之一按预期工作时遇到一些问题。
我需要第二个函数(AddToArray)将元素添加到指定索引。任何现有元素都不能被覆盖或删除。
例如,如果我有一个具有四个索引的数组,并且所有索引的值均为 5,并且我调用函数 AddToArray 2 4。我需要在第三个索引中写入该函数,并将现有索引下移一位,因此现在的数组看起来像这样:
5
5
4
5
5
到目前为止,这是我的代码,显示了我的 CreateArray 函数和 AddToArray 函数的小代码片段。我已经尝试了一段时间了,但我就是看不到解决方案。
function CreateArray($Item1, $Item2)
{
$arr = New-Object Array[] $Item1;
# Kontrollerar om $Item2 har fått någon input och skriver in det i arrayen
if ($Item2)
{
for($i = 0; $i -lt $arr.length; $i++)
{
$arr[$i] = $Item2;
}
}
# Standard värde på arrayens index om inget värde anges vid funktionens anrop
else
{
$Item2 = "Hej $env:username och välkommen till vårat script!";
for($i = 0; $i -lt $arr.length; $i++)
{
$arr[$i] = $Item2;
}
}
$script:MainArray = $arr;
}
function AddToArray ($index, $add)
{
$MainArray[$index] = $add;
}
.NET 中的数组不直接支持插入,并且它们通常是固定大小的。 PowerShell 确实允许轻松调整数组大小,但如果数组变大并且您追加(导致调整大小)很多,则性能可能会很差。
完成您想要的操作的一种简单方法是从各个部分创建一个新数组,例如:
if ($index -eq 0) {
$MainArray = $add,$MainArray
}
elseif ($index -eq $MainArray.Count - 1) {
$MainArray += $add
}
else {
$MainArray = $MainArray[0..($index-1)], $add, $MainArray[$index..($MainArray.Length-1)]
}
但这有点像喷涌。我会为此使用列表,它支持插入并且比数组更有效。
$list = new-object 'System.Collections.Generic.List[object]'
$list.AddRange((1,2,3,4,5))
$list.Insert(2,10)
$list
如果你确实需要一个数组,请调用$list.ToArray()
方法,当你完成操作列表。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)