共用方式為


複製和更新表達式

為了減少可變動系結的需求,Q# 支援陣列的複製和更新運算式,這可讓您透過索引或索引範圍存取專案。

複製和更新表達式會具現化新的數位,並將所有項目設定為原始數位中對應的值,但特定指定的專案除外,這些專案會設定為表達式右側定義的專案。 它們是使用三元運算符建構 w/<-;語法 w/ 應讀為 「with」 的常用簡短表示法:

    original w/ itemAccess <- modification

其中 original 是陣列運算式,itemAccess 是數位配量有效的任何表達式,modification 是新的值或值。 具體地說,itemAccess 表示式的類型可以是 IntRange。 如果 itemAccessInt類型的值,則 modification 的類型必須符合數位的項目類型。 如果 itemAccess 是類型為 Range的值,則 modification 的類型必須與數位類型相同。

例如,如果 arr 包含數位 [0, 1, 2, 3],則

  • arr w/ 0 <- 10 是陣列 [10, 1, 2, 3]
  • arr w/ 2 <- 10 是陣列 [0, 1, 10, 3]
  • arr w/ 0..2..3 <- [10, 12] 是陣列 [10, 1, 12, 3]

就優先順序而言,copy-and-update 運算符是左關聯,且優先順序最低,特別是優先順序低於範圍運算符 (..) 或三元條件運算符 (?|)。 選擇的左關聯性可讓您輕鬆鏈結複製和更新表示式:

    let model = ArrayConstructor()
        w/ 1 <- alpha
        w/ 3 <- gamma
        w/ 5 <- epsilon;

至於建構與最左邊表達式相同類型之表達式的任何運算符,可以使用對應的 evaluate-and-reassign 語句。 例如,下列兩個語句會達成下列目的:第一個語句會宣告可變數 arr,並將它系結至整數數位的預設值。 第二個語句接著會建置新的數位,並將第一個專案 (索引 0) 設定為 10,並將它重新指派給 arr

    mutable arr = [0, size = 3]; // arr contains [0, 0, 0]
    arr w/= 0 <- 10;             // arr contains [10, 0, 0] 

第二個語句只是簡短的語法 arr = arr w/ 0 <- 10;

複製和更新表達式允許根據現有數位有效率地建立新的數位。 copy-and-update 表達式的實作可避免複製整個數位,方法是只複製必要的元件以達到所需的行為,並盡可能執行就地修改。 因此,陣列初始化不會因為不變性而產生額外的額外負荷。

Std.Arrays 命名空間提供方便的工具庫來建立和操作陣列。

複製和更新表達式是即時建構新數位的便利方式;例如,下列表達式會評估為陣列,其中所有專案都設定為 PauliI,但索引 i的專案除外,其設定為 PauliZ

[PauliI, size = n] w/ i <- PauliZ