我是Powershell的新手并尝试将一些功能集中在一起。我创建了一个从输入创建数组的函数。我还试图创建一个函数,在不使用列表的情况下在指定的索引处添加元素(我知道列表更容易,但我试图理解如何在没有列表的情况下执行此操作)。
到目前为止,这是我的代码。我只是不能让这个工作,我尝试过循环和下面的代码,任何帮助表示赞赏。
亲切的问候!
Function Create_array ($index, $value)
{
$array = new-object array[] $index
if ($value)
{
for ($i = 0;$i -lt $array.length;$i++)
{
$array[$i] = $value
}
write-host ""
write-host "Grattis!! Din array är nu skapad med angivet index och värde."
}
else
{
for ($i = 0;$i -lt $array.length;$i++)
{
$array[$i] = "Hej $env:username och välkommen till Dennis och Jonas script. Detta är en defaulttext, ange ett eget index följt av önskat värde"
}
write-host ""
write-host "Array är nu skapad med defaultvärden"
}
return $array
}
Function Add_to_array ($nyarray, $value, $index) # Lägger till ett värde på angivet index eller längst ner om index ej anges.
{
if ($index -gt $nyarray.length)
{
$i = $nyarray.length
write-host "Du har angivit ett felaktigt index. Din array innehåller $i element"
}
elseif ($index -gt 2) # Kollar om det angivna indexet är större än 2
{
$nyarray[$index - 2] += $värde # Om större än 2: Angivna värdet läggs in på angivet index ($index - 2)
write-host "Element är nu inlagt på angivet index i din array"
} # och resten flyttas ner.
elseif ($index -eq 1) # Kollar om angivet index är mindre än 2
{
$nyarray[0] += $värde # Om mindre sätts det angivna värdet in på index 1 (0)
write-host "Element är nu inlagt på angivet index i din array"
}
else
{
$nyarray += $värde # Om inget index anges sätter denna funktion in det angivna värdet längst ner.
write-host "Element är nu inlagt längst ner i din array"
}
return $nyarray # Lägger in den "nya" arrayen i det variabelnamn man valt.
}
答案 0 :(得分:3)
您可以使用数组切片来执行此操作:
$array = @(1,2,4,5)
$value = 3
$index = 2
$array = $array[0..($index -1)],$value,$array[$index..($array.Length -1)]
$array
答案 1 :(得分:2)
这就是我的管理方式。包装成一个函数。虽然您可能有问题。如果您的数组值很长。
$myArray = @("how","to","slice","into","an","array")
Function Insert-ToArray($Array, $insertAfter, $valueToInsert){
#find the index of value before insertion
$insertPoint = $Array.IndexOf($insertAfter)
#split the array into two parts
$firstHalf = $Array[0..$insertPoint]
$secondHalf = $Array[($insertPoint +1)..$Array.Length]
#slice into a new array
$newArray = @($firstHalf,$valueToInsert,$secondHalf)
return $newArray
#returning this new array means you can assign it over the old array
}
$myArray = Insert-ToArray -Array $myArray -insertAfter "slice" -valueToInsert "something"
$myArray
答案 2 :(得分:1)
正如您声称的那样,您正试图了解如何在没有List的情况下工作,我将解释数组如何在幕后工作。这种数据操作主要在低级编程中遇到,如数据结构类和C编程。 Java,C#和Powershell等高级语言确实采用了这些技术,但实际的实现对用户来说是隐藏的。尽管如此,运行时还是做了类似这些步骤的事情。
作为基本数据结构的数组实际上不支持插入。 Array仅支持读写操作。将数组视为平方数学论文,其中每个数组单元格都是纸上的正方形。在论文中写一些文字(管道字符表示正方形,数字是索引):
0 1 2 3 4 5 6 7
|t|s|t| |t|e|x|t|
现在考虑在单词e
中插入遗失的tst
个字母,使其成为test
。会发生什么事?需要一个新阵列:
0 1 2 3 4 5 6 7 8
|t|e|s|t| |t|e|x|t|
请注意,在将e
插入第二个单元格后,所有剩余的字母都会向前移动一步。所以发生了什么事?你手工完成的插入程序是这样的,
正如您所看到的,这个过程有点古怪。在纸张上“插入”字母时,不会在原始数组中创建新的空单元格。您必须手动复制所有元素。
作为全新阵列的替代方案,您可以通过在其中添加额外的单元格来调整阵列的大小。然后,不是将字母复制到新数组,而是从数组的末尾开始,然后将字母向前一步复制到插入索引。然后添加插入的字母并停止。所以,
0 1 2 3 4 5 6 7 8
|t|s|t| |t|e|x|t| | # start
|t|s|t| |t|e|x|t|t| # moved last t to the end
|t|s|t| |t|e|x|x|t| # overwrite old t with x
|t|s|t| |t|e|e|x|t| # overwrite old x with e
|t|s|t| |t|t|e|x|t| # and so on
|t|s|t| | |t|e|x|t|
|t|s|t|t| |t|e|x|t|
|t|s|s|t| |t|e|x|t| # insert location reached after this
|t|e|s|t| |t|e|x|t| # don't overwrite s with t but e. Done!
现在您已了解数组插入的工作原理,mjolinor的示例很容易理解。通过从开始到插入点复制元素,添加插入并复制其余数组内容来创建新数组。
答案 3 :(得分:1)
如果结果中需要平面数组,则可以使用sum运算符:
下面的代码在$ array1的位置4添加[string]'Word'
$new_array = @($array1[0..3]) + @('Word') + @($array1[4..5])
用例将两个平面数组连接在一起,或在固定数组的某个位置添加一些数据。