考慮以下內容:(注意:為了便于閱讀,我稍微修改了輸出)
~> @(11..20)
11, 12, 13, 14, 15, 16, 17, 18, 19, 20
~> @(11..20 1)
11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 1
~> @(1 11..20)
InvalidOperation: Method invocation failed because [System.Object[]] does not contain a method named 'op_Addition'.
我一直覺得這種陣列加法語法令人困惑,并且更喜歡類似@(1,11..20).
無論如何,為什么第三次操作與第二次不同?
是否因為1不被視為陣列,即使它是作為陣列定義語法的一部分給出的?
~> @(1,2 11..20)
1, 2, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20
如果是這樣,那么為什么會@(11..20 1)按預期作業?
我可以通過幾種方式解決這個問題......
~> @(@(1) 11..20)
1, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20
~> @(,1 11..20)
1, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20
~> @(11..20 1) | Sort
1, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20
但是這些看起來很丑陋,不優雅,而后一種解決方法并沒有考慮到我實際上不想對陣列進行排序的情況。
最有意義的是@(,1 11..20),雖然它不是特別令人愉快。有沒有更合適的方法來以所需的順序實作所需的結果,而無需額外的語法或管道?
官方檔案中的示例都沒有展示這種特殊的排列。
謝謝。
uj5u.com熱心網友回復:
@(...), PowerShell 的陣列子運算式運算子- 列舉任何...輸出并將其收集到[object[]]陣列中 - 僅在評估后 ...應用,因此我們可以在此討論中將其放在一邊。
通常,在 PowerShell 中,操作的LHS型別決定了適用于何種型別的操作多載。
其中
11..20 1,LHS 是一個陣列,由于使用..了范圍運算子,因此該運算子執行陣列連接。在
1 11..20中,LHS 是一個標量- 一個[int]實體 - 因此運算子嘗試執行數字加法,但是失敗了,因為將陣列添加到數字沒有意義,因此不受支持。
如果要使用標量LHS 執行陣列連接,請將LHS 包裝在aux 中。使用一元形式的陣列,陣列構造器運算子:,
, 1 11..20
或者,使用以下方法之一:
@(1) 11..20[array] 1 11..20
如果您不提前知道 LHS 是否實際上已經是一個陣列,但如果不是,您希望它這樣對待它,那么[array]強制轉換是最有效的解決方案:
[array] 1 11..20
請注意,轉換僅適用于1,基于 PowerShell 的運算子優先規則。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/434566.html
上一篇:接受部分自動完成
