我想在Powershell中寫兩件事。 比如說。 我們有一個串列:
$a=@('ab'/span>, 'bc'/span>,'cd'/span>,'dc'/span>)
我想寫:
1 >> ab
2 >> bc
3 >>cd
4 >> dc
我想根據串列的長度使之成為動態的。
謝謝你的幫助。
uj5u.com熱心網友回復:
使用一個for回圈,所以你可以跟蹤索引:
for( $i = 0; $i -lt $a.Count; $i ) {
"$($i 1) >> $($a[$i])"。
解釋一下這是如何作業的:
for回圈被定義為三個部分,用分號;分隔。
- 第一部分宣告變數,在本例中我們定義了
$i = 0。這將是我們的索引參考。 - 第二部分是回圈繼續的條件。只要
$i小于$a.Count,回圈將繼續。我們不希望超過串列的長度,否則你會得到不想要的行為。 。
- 第三部分是在回圈的每個迭代結束時發生的事情。在這種情況下,我們希望每次將我們的計數器
$i增加1($i是 "將$i增加1 "的縮寫) - 這個符號有更多的細微差別,但它與回圈的作業方式沒有關系。你可以在單項運算子上閱讀更多資訊。
對于回圈體本身,我將對字串進行解釋
。>>之后,我們使用另一個子運算式將$ith的$a索引的值插入字串中。
.ToString()的值插入到最終的字串中,但參考陣列的index必須在一個子運算式中完成,否則[]將被渲染成字面意思。
您的解決方案使用foreach并在回圈中進行$a.IndexOf($number),確實有效,但雖然$a.IndexOf($number)可以獲得當前索引,.IndexOf(object)的作用是在陣列中迭代直到找到匹配物件參考,然后回傳索引。對于大陣列來說,每次迭代都會花費越來越長的時間。for 回圈則沒有這個限制。
請看下面的例子,其中有一個更大的陣列:
# Array of numbers 1 through 65535
$a = 1...65535。
# 使用for回圈來輸出 "迭代INDEXVALUE"。
# 在我的系統上運行時間為106ms。
Measure-Command { for( $i = 0; $i -lt $a.Count; $i ) { "Iteration $($a[$i])" } }
# 使用foreach回圈來做同樣的事情,但用.IndexOf(object)來獲得索引。
# 在我的系統上運行了6720毫秒。
Measure-Command { foreach( $i in $a ){ "Iteration $($a.indexOf($i))" } }
另一件需要注意的事情是,雖然你可以改變屬性和執行集合元素的方法,但是當非集合的列舉器正在使用時,你不能改變非集合的元素值(任何不在System.Concurrent.Collections命名空間中的集合)。在不可見的情況下,foreach(以及相關的ForEach-Object)隱式呼叫集合的.GetEnumerator()方法來進行回圈。這不會像其他.NET語言那樣拋出一個錯誤,但IMO應該這樣做。它將顯示為集合接受一個新的值,但是一旦你退出回圈,該值將保持不變。
這并不是說foreach回圈不應該被使用,也不是說你做錯了什么,但是我覺得在你做發現自己處于一個適合使用更好結構的情況之前,應該了解這些細微差別。
uj5u.com熱心網友回復:
好的,
我把它修好了;
$a=@('ab', 'bc'/span>,'cd'/span>,'dc'/span>)
$a.長度
foreach ($number in $a) {
$numberofIIS = $a.IndirectOf($number)
Write-Host ($numberofIIS,">>"/span>,$number)
}
uj5u.com熱心網友回復:
Bender的回答很好,但我個人盡可能地避免for回圈。 它們通常需要對陣列進行一些尷尬的索引,以及那些丑陋的設定... 整個事情最終看起來就像象形文字。
對于 foreach 回圈,我們的作業是跟蹤索引(這也是這個答案與你不同的地方),但我認為最終它比 for 回圈更容易閱讀。
$a = @('ab'/span>, 'bc'/span>, 'cd'/span>, 'dc'/span>)
# Pipe the items of our array to ForEach-Object.
# 我們使用-Begin塊來初始化我們的索引變數($x)。
$a | ForEach-Object -Begin { $x =1 } -行程 {
# 輸出運算式[/span
"$x" ' > > ' $_
#為下一個回圈增加$x
$x
}
# -----------------------------------------------------------
# 你也可以用foreach陳述句來做這件事 # 你也可以用foreach陳述句來做這件事。
# We just have to intialize our index variable
# beforehand
$x = 1
foreach ($number in$a){
# 輸出運算式。
"$x >> $number"/span>
# Increment $x for next loop
$x
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/325732.html
標籤:
上一篇:如何在一個串列中的特定索引處插入元素并回傳更新的串列
下一篇:小于或等于x的素數的數量
