Изменить форму Ve c или массива - PullRequest
0 голосов
/ 07 мая 2020

Я новичок в ржавчине. Хочу переделать стандартный ve c. Хотя это может быть достигнуто с помощью l oop, мне интересно, есть ли лучший способ

let y = [1,2,3,4,5,6,7,8,9,....]

Я хочу изменить это, как показано ниже,

[[1,4,7],[2,5,8],[3,6,9],...] 

Это должно быть гибкий, так что я могу сделать функцию с аргументом size (ожидая до size = 500),

[[1,3],[2,4],[3,5],...] //size=2

Ответы [ 2 ]

0 голосов
/ 07 мая 2020

В ваших требованиях указано, что это должно быть «изменение формы» стандарта Vec. Я понимаю, что это означает, что вы будете sh делать reinterpret_cast (чтобы украсть терминологию из С ++) на существующем векторе на месте .

Единственный способ, который я знаю сделать это небезопасно. Используя трансмутировать , вы можете переинтерпретировать свой Vec<usize>, скажем, Vec<[usize; 4]>.

Если вы готовы отказаться от «стандартного» Ve c, есть несколько приличных тензор ящики в наличии.

0 голосов
/ 07 мая 2020
Метод

chunks преобразует фрагмент (который может быть получен из векторов, массивов и некоторых других объектов) в непересекающиеся фрагменты. Результатом функции является итеративный объект, который необходимо преобразовать во что-то значимое. В этом примере я создаю вектор кусков с помощью функции collect на итераторе.

fn main() {
    let y = [1,2,3,4,5,6,7,8,9];
    let split_y: Vec<_> = y.chunks(4).collect(); 
    print!("{:?}", split_y); // [[1, 2, 3, 4], [5, 6, 7, 8], [9]]
}

Ищите также chunks_exact там , если вы хотите преобразовать хвост [9] в другую форму.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...