Как создать итератор, который выдает элементы коллекции, указанной списком индексов в Rust? - PullRequest
2 голосов
/ 21 октября 2019

Есть ли краткий способ перебора вектора с использованием заданного списка индексов? У меня есть код, который выглядит примерно так:

fn main() {
    // Create a vector
    let v = vec![0.1, 1.2, 2.3, 3.4, 4.5, 5.6, 7.8];

    // Create a series of indices
    let i = vec![3, 4, 2, 1];

    // Iterate over the elements in v in the order specified by each index in i
    for j in &i {
        println!("{}", v[*j]);
    }
}

Я бы хотел изменить его так, чтобы я зацикливался непосредственно на элементах в v, а не на циклически перебирал индексы в i. По сути, что-то похожее на for x in vs[i].

1 Ответ

3 голосов
/ 21 октября 2019

Одна возможность:

i.iter().map(|idx| v[*idx])

как в:

fn main() {
    // Create a vector
    let v = vec![0.1, 1.2, 2.3, 3.4, 4.5, 5.6, 7.8];

    // Create a series of indices
    let i = vec![3, 4, 2, 1];

    // Iterate over the elements in v in the order specified by i
    for j in i.iter().map(|idx| v[*idx]) {
        println!("{}", j);
    }
}
...