簡體   English   中英

如何通過示例編寫 Rust 中的轉置 function 示例?

[英]How do I write the transpose function example from Rust by Example?

我正在關注示例教程中的 Rust,並且正在參加元組活動的第二部分,即使用reverse ZC1C425268E68385D1AB5074C17A94F14 添加transpose function。 這將接受一個矩陣作為參數並返回一個交換了兩個元素的矩陣。 例如:

println!("Matrix:\n{}", matrix);
println!("Transpose:\n{}", transpose(matrix));

預期成績:

Input Matrix:
( 1.1 1.2 2.1 2.2 )
Transposed output:
( 1.1 2.1 1.2 2.2 )

我找不到正確的代碼,這是我正在嘗試的:

// this is defined in the tutorial
#[derive(Debug)]
struct Matrix(f32, f32, f32, f32);

// this is my attempt that does not compile
fn transpose(maat: Matrix) -> (Matrix) {
    let matrix = maat;
    (matrix.0, matrix.2, matrix.1, matrix.3)
}

我不想為您提供完整的解決方案,因為如果您正在學習Rust,我會給您帶來損害。 在本教程的這一點上,您缺少一個關鍵要素。 不是你的錯。

Matrix是一個“元組結構”(有時也稱為新類型),在Rust的后面部分將通過示例進行介紹。 如果您想先睹為快,則在結構部分中,您將學習缺失的兩個部分。

第一步struct Matrix(f32, f32, f32, f32); 可以按照與簡單元組類似的方式來解構本教程中定義的。

如果您有一個let matrix = Matrix(1.1, 1.2, 2.1, 2.2); 您可以執行以下操作為其單個元素創建名稱:

let Matrix(r1c1, r2c2, r2c1, r2c2) = matrix

matrix.0 ,您所做的工作( matrix.0matrix.1 ...)也能工作

第二部分 當您要創建Matrix的新實例時,可以執行Matrix(1.1, 1.2, 2.1, 2.2) 從嘗試編寫轉置開始,您試圖返回一個元組,但是像Matrix這樣的元組結構是不同的,不兼容的類型(這就是為什么它也稱為“新類型”的原因)

reverse為例,重寫reverse功能以接受f32

fn reverse(pair: (f32, f32)) -> (f32, f32) {
    let (a, b) = pair;
    (b, a)
}

fn transpose(mat: Matrix) -> Matrix {
    let (a, b) = reverse((mat.1, mat.2));
    Matrix(mat.0, a, b, mat.3)
}

你需要在這里做三件事:

  1. 告訴顯示格式如何構造 output 以便它將矩陣分成兩行等長。
 impl fmt::Display for Matrix { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { write,(f, "( {} {} )\n( {} {} )". self,0. self,1. self,2. self.3) } }
  1. 編寫轉置 function 以轉置順序返回矩陣。
 fn transpose(mat: Matrix) -> Matrix { return Matrix(mat.0, mat.2, mat.1, mat.3); }
  1. 在 println 中調用它

println:("Transpose,\n{}"; transpose(matrix));

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM