24645


配列のある要素を一つ取り出して、他の全ての要素と比較して、その値を更新する。

[code]

    fn main() {
        let mut v: Vec<f64> = vec![1.0, 2.0, 3.0, 4.0, 5.0];
        for xi in 0..v.len() {
            for (yi, y) in v.iter().enumerate() {
                if xi != yi {
                    let mut x = &mut v[xi];
                    if *x < *y {
                        *x += (*y - *x) / 2.0;
                    }
                    println!("{}", x);
                }
            }
        }
    }
    
[/code]

xに配列の要素をmutableで束縛したいのですが、既にyに配列の要素が束縛されているために、コンパイルエラーが発生します。このように変数を複数参照・変更したい場合はどうすれば良いのでしょうか？


CC BY-SA 3.0
2016-05-06T17:41:12.297
24614
2016-05-08T14:46:20.373
12467
question
rust
配列に二重アクセスしたい


borrowのきまりは`reference`は複数つくれる， `mutable reference`は1つしかつくれない．
`reference`と`mutable reference`は同時にborrowできないということです．  
`v.iter()`で`reference`したうえで`&mut v[xi]`でさらに`mutable
reference`をつくろうとしておこられているのです． また`v.iter_mut()`にしても`mutable
reference`は1つまでというルールに反します．  
単純に以下のようにindexでループしてはだめですか?

[code]

    fn main() {
        let mut v: Vec<f64> = vec![1.0, 2.0, 3.0, 4.0, 5.0];
        for xi in 0..v.len() {
            for yi in 0．．．v.len() {
                if xi != yi {
                    if v[xi] < v[yi] {
                        v[xi] += (v[yi] - v[xi]) / 2.0;
                    }
                    println!("{}", v[xi]);
                }
            }
        }
    }
    
[/code]


CC BY-SA 3.0
2016-05-08T14:46:20.373
24645
2016-05-08T14:46:20.373
14418
24614
answer