< 返回版块

Neutron3529 发表于 2020-06-09 13:36

(总觉得.iter很漂亮,故有此问) 通常来说,写程序(比如对矩阵赋值)的时候,很难避免二重循环,而如果矩阵是对称阵,在对矩阵的上三角阵和下三角阵进行赋值的时候,我们难免用到类似的循环: for(i=1;i<N;i++)for(j=0;j<i;j++){matrix[i][j]=matrix[j][i]=...} 在Rust里面,我们可以用for i in 1..N{for j in 0..i{...}}达到同样的效果

——然而,我想问的是,我们能用iter达到类似的效果吗?

另外,如果这个矩阵代表的是两点之间的距离,那么我们一定有一个大小为N的Vec,不妨记作points。 如果我们想计算points之间的距离,我们可以用for i in 1..N{for j in 0..i{let dist0=dist_function(points[i],points[j]);dist[j][i]=dist0;dist[i][j]=dist0;}}完成计算。

但……能否用iter写出更好看的程序呢?

最后……如果对Vec排序,我们可以用任何一种方法……但如果非要手写冒泡排序,大概免不了类似for i in 1..N{for j in 0..i{...}}这样的结构 这个能用iter(iter_mut)实现吗?

评论区

写评论
作者 Neutron3529 2020-06-10 02:56

我想的是能不能在有points:Vec之后

用points.iter()之类的神奇操作完成任务

最开始的描述有些词不达意了。

(毕竟,0..N本身就是一个iter……)

对以下内容的回复:

chirsz-ever 2020-06-09 23:10
for (i, j) in (0..N).map(|n| (0..n).map(move |k| (n, k))).flatten() {
    println!("({}, {})", i, j);
}

playground

建议还是直接写循环变量吧,又不是 haskell……

作者 Neutron3529 2020-06-09 21:42

能给一个例子吗?

用迭代器写冒泡/计算n个点的两两距离

不优雅也行啊~

对以下内容的回复:

Mike Tang 2020-06-09 19:49

能。

不优雅。

完毕。😂

1 共 4 条评论, 1 页