Обновить

Инвертирование порядка сортировки в Rust

Rust позволяет легко сортировать элементы по ключу с помощью .sort_by_key, в примере ниже важные заметки будут помещены в конец:

struct Note {
    imp: bool,
    title: &'static str,
}
let mut notes = vec![
    // ...
];
notes.sort_by_key(|k| k.imp);

Но инвертирование порядка сортировки с помощью ключа может быть не так очевидно, оно достигается с помощью вспомогательной структуры Reverse, вот как ее можно применить к приведенному выше примеру, чтобы важные заметки были в начале:

use std::cmp::Reverse;
// ...
notes.sort_by_key(|k| Reverse(k.imp));

Как это реализовано? Давайте взглянем на исходный код стандартной библиотеки Rust:

pub struct Reverse<T>(pub T);

impl<T: Ord> Ord for Reverse<T> {
    fn cmp(&self, other: &Reverse<T>) -> Ordering {
        other.0.cmp(&self.0)
    }
}

Все просто - это тип обертка (newtype) для исходного типа, и для типов с трейтом Ord она переопределяет Ord, но вместо сравнения self с other она сравнивает other с self, что означает - порядок в результате меняется на обратный. Просто и красиво!

Теги:
Рейтинг0
Комментарии5

А все-таки Qwen3.8-27B — думает меньше и быстрее чем 3.6

В пятницу вышла Qwen3.8-27B. Скажу честно, с середины мая я отказался от подписок и сидел исключительно на локальной Qwen3.6 (для всех своих домашних проектов), у меня даже статья была на эту тему. Поэтому мне было очень интересно увидеть на что способна новая Qwen3.8-27B.

Тут на Хабре было несколько статей о том, что 3.8 слишком долго думает и что у 3.8 слишком много галлюцинаций (что, как мне кажется, не совсем корректно), поэтому я решил поделиться настройками, которые работают (у меня), надеюсь они будут кому-нибудь полезны. Qwen3.8-27B превзошла мои самые смелые ожидания, и уж что-что, а задумчивой ее никак не назовешь.

А все-таки Qwen3.8-27B — думает меньше и быстрее чем 3.6

Публикации