Size: a a a

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

2020 August 09

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Эрик
Изменил поле на важное — push нового индекса в вектор.
У меня элементы по полю двигаются.
Если я хочу передвинуть важный элемент, зная его положение, то мне нужно:
1. Найти его в списке важных
2. Переместить на поле
3. Поменять в списке важных
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Плюс это создаёт гемор с удалением элементов (что, впрочем, решается заменой Vec на HashMap)
источник

Э

Эрик in Rust — русскоговорящее сообществo
Emmanuel Goldstein
У меня элементы по полю двигаются.
Если я хочу передвинуть важный элемент, зная его положение, то мне нужно:
1. Найти его в списке важных
2. Переместить на поле
3. Поменять в списке важных
BTreeSet, и просто remove(old), insert(new).
источник

Э

Эрик in Rust — русскоговорящее сообществo
Если оба оказались важными, то можно даже не трогать ничего.
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Эрик
BTreeSet, и просто remove(old), insert(new).
Это не позволяет идентифицировать важный элемент снаружи по его номеру в списке важных, что было бы весьма неплохо
Но хешмап уже позволяет
источник

Э

Эрик in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Это не позволяет идентифицировать важный элемент снаружи по его номеру в списке важных, что было бы весьма неплохо
Но хешмап уже позволяет
Ну BTreeMap, и там что-нибудь внутри, если тебе не только индекс нужен.
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Эрик
Ну BTreeMap, и там что-нибудь внутри, если тебе не только индекс нужен.
А почему BTreeMap, а не HashMap?
источник

Э

Эрик in Rust — русскоговорящее сообществo
Привычка, мне последнее время постоянно ordered map нужны были.
источник

Э

Эрик in Rust — русскоговорящее сообществo
А так да, хашмапа вроде бы получше, если порядок не нужен.
источник

Э

Эрик in Rust — русскоговорящее сообществo
Но там ещё надо Hash руками на ключ писать обычно, чтобы лишние штуки в хеш не шли.
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Эрик
Но там ещё надо Hash руками на ключ писать обычно, чтобы лишние штуки в хеш не шли.
У меня в качестве ключа подойдёт любой токен
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Например, usize
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Или, ещё лучше, ньютайп над usize
источник

RS

Roma S in Rust — русскоговорящее сообществo
Alex Zhukovsky
речь шла про иммутабельное красивое апи. В расте или то, или другое, а часто и ни того, ни другого. Не вижу ничего плохого в апи с &mut, но вот какой вопросы был такой ответ
ну наоборот в расте можно же мувнуть объект и гарантировать, что его трогать не будут
и вернуть тот же обновлённый
источник

RS

Roma S in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Очевидный вариант — хранить отдельный вектор с индексами всех «важных» элементов. Но так легко запутаться в логике.
Кроме того, при получении важного элемента по его индексу возникнет такая неприятная фигня:
let pos = important_elems[idx];
let obj = match field[pos] {
   Important(obj) => obj,
   _ => unreachable!("something unimportant found"),
}
а какой размер поля?
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Roma S
а какой размер поля?
Не слишком большой
Думаю, вряд ли больше 200x100
источник

Э

Эрик in Rust — русскоговорящее сообществo
Emmanuel Goldstein
Или, ещё лучше, ньютайп над usize
А ты уверен, что не сколлизятся? Если да, то есть такая штука:
https://docs.rs/nohash-hasher/0.2.0/nohash_hasher/
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Эрик
А ты уверен, что не сколлизятся? Если да, то есть такая штука:
https://docs.rs/nohash-hasher/0.2.0/nohash_hasher/
Я их сам генерирую, так что довольно уверен
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Alex Zhukovsky
речь шла про иммутабельное красивое апи. В расте или то, или другое, а часто и ни того, ни другого. Не вижу ничего плохого в апи с &mut, но вот какой вопросы был такой ответ
Да не, на самом деле, пока норм выходит.
источник

EG

Emmanuel Goldstein in Rust — русскоговорящее сообществo
Упс, fight возвращает Option<Crab>. Тем лучше.
источник