Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matrix 如何编写Rust宏以将行主顺序转换为列主顺序?_Matrix_Rust_Macros - Fatal编程技术网

Matrix 如何编写Rust宏以将行主顺序转换为列主顺序?

Matrix 如何编写Rust宏以将行主顺序转换为列主顺序?,matrix,rust,macros,Matrix,Rust,Macros,宏将允许您以自然的方式编写任意M x N矩阵。例如: 矩阵![ 1.0, 3.0, 5.0; 2.0, 4.0, 6.0; ] 对应于以下矩阵 ┌ ┐ │ 1.0 3.0 5.0 │ │ 2.0 4.0 6.0 │ └ ┘ 宏将输出一个数组,如下所示: [[1.0,2.0]、[3.0,4.0]、[5.0,6.0]] 我知道我可以非常简单地使用以下命令解析行主顺序。但我如何才能将其转换为列主顺序。我不知道如何切换

宏将允许您以自然的方式编写任意M x N矩阵。例如:

矩阵![
1.0, 3.0, 5.0;
2.0, 4.0, 6.0;
]
对应于以下矩阵

┌                 ┐
│  1.0  3.0  5.0  │
│  2.0  4.0  6.0  │
└                 ┘
宏将输出一个数组,如下所示:

[[1.0,2.0]、[3.0,4.0]、[5.0,6.0]]
我知道我可以非常简单地使用以下命令解析行主顺序。但我如何才能将其转换为列主顺序。我不知道如何切换重复组的顺序

macro_rules! matrix {
    ($($($e:expr),*);*) => {(
        [$([$($e),*]),*]
    }
}
你去:


只有这样的大小或任何NxM矩阵?任何NxM矩阵,我将在问题中澄清这对于程序宏来说是非常容易的。你可以使用一个,一次读取一个值,然后使用将值累加到每列中。使用Unicode符号制作一个大矩阵的道具。另请参见哇谢谢,这太棒了。为了处理一些边缘情况,我稍微调整了一下解决方案。“你认为还有什么可以简化的吗?我必须添加一条新规则。”罗斯麦克阿瑟看到我更新的答案。
macro_rules! matrix {
    ($($($v:expr),* );*) => {
        matrix!(@phase2 [] $($($v),* );*)
    };
    (@phase2 [$([$($col:expr),*])*] $($v:expr);* ) => {
        [$([$($col),*],)* [$($v),*]]
    };
    (@phase2 [$([$($col:expr),*])*] $($v0:expr, $($v:expr),* );* $(;)?) => {
        matrix!(@phase2 [$([$($col),*]),* [$($v0),*]] $($($v),* );*)
    };
}