Size: a a a

Rust — русскоговорящее сообществo

2020 October 20

Д

Джакс in Rust — русскоговорящее сообществo
Господа подскажите как засортировать коллекцию в таком чейне

let mut time: Vec<i32> = arr.iter()
       .map(|time| Time::new(time).to_minutes())
       .collect();
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Джакс
Господа подскажите как засортировать коллекцию в таком чейне

let mut time: Vec<i32> = arr.iter()
       .map(|time| Time::new(time).to_minutes())
       .collect();
time.sort();
?
источник

c

call eax in Rust — русскоговорящее сообществo
Джакс
Господа подскажите как засортировать коллекцию в таком чейне

let mut time: Vec<i32> = arr.iter()
       .map(|time| Time::new(time).to_minutes())
       .collect();
Itertools::sorted
источник

Д

Джакс in Rust — русскоговорящее сообществo
не так то да. хочется что то тип этого
let mut time: Vec<i32> = arr.iter()
       .map(|time| Time::new(time).to_minutes())
       .collect()
       .sort();
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Джакс
не так то да. хочется что то тип этого
let mut time: Vec<i32> = arr.iter()
       .map(|time| Time::new(time).to_minutes())
       .collect()
       .sort();
Почему бы просто не написать в две строчки?
источник

Э

Эрик in Rust — русскоговорящее сообществo
Джакс
не так то да. хочется что то тип этого
let mut time: Vec<i32> = arr.iter()
       .map(|time| Time::new(time).to_minutes())
       .collect()
       .sort();
Просто в две строки пишешь, и всё.
источник

Д

Джакс in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Почему бы просто не написать в две строчки?
потому что хочется узнать есть ли возможность сделать этоодной цепочкой
источник

Э

Эрик in Rust — русскоговорящее сообществo
И да, тебе скорее всего нужен sort_unstable, а не стейбл-сорт. Но не уверен.
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Джакс
потому что хочется узнать есть ли возможность сделать этоодной цепочкой
Можно через Itertools::sorted, но это будет лишняя аллокация, лишний коллект и так делать не надо
источник

Д

Джакс in Rust — русскоговорящее сообществo
ок, спасибо
источник

Э

Эрик in Rust — русскоговорящее сообществo
Джакс
потому что хочется узнать есть ли возможность сделать этоодной цепочкой
Можно, если написать бойлерплейтный трейт
trait X { fn sort(self) -> Self; }
impl<T> X for Vec<T> { fn sort(mut self) -> Self { self.sort/*_unstable*/(); self }
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Эрик
Можно, если написать бойлерплейтный трейт
trait X { fn sort(self) -> Self; }
impl<T> X for Vec<T> { fn sort(mut self) -> Self { self.sort/*_unstable*/(); self }
Ну или так, да
источник

c

call eax in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Можно через Itertools::sorted, но это будет лишняя аллокация, лишний коллект и так делать не надо
неа

> The sorted iterator, if directly collected to a Vec, is converted without any extra copying or allocation cost.
источник

c

call eax in Rust — русскоговорящее сообществo
лучше через Itertools::sorted
источник

Э

Эрик in Rust — русскоговорящее сообществo
Тянуть нехилую зависимость просто потому что лень написать лишнюю строчку.
источник

Э

Эрик in Rust — русскоговорящее сообществo
>Rust way
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
call eax
неа

> The sorted iterator, if directly collected to a Vec, is converted without any extra copying or allocation cost.
Это задокументированная случайность
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
itertools не может этого гарантировать, потому что .sorted() возвращает стдлибный тип, а не их
источник

c

call eax in Rust — русскоговорящее сообществo
Эрик
>Rust way
> Yes
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Кроме того, эта фича опирается на специализацию, которая может исчезнуть, ибо нестабильна
источник