Size: a a a

2020 October 20

АГ

Алексей Герасимов... in Rust Beginners
Иван Лещенко
Взять первый элемент итератора при условии что он прошёл через фильтр, иначе вернуть None
iter.take(1).filter(…).next()?
источник

ИЛ

Иван Лещенко... in Rust Beginners
Алексей Герасимов
iter.take(1).filter(…).next()?
Оно!
источник

ИЛ

Иван Лещенко... in Rust Beginners
Спасибо
источник

АГ

Алексей Герасимов... in Rust Beginners
у итератора None признак что он закончился и его в общем случае дольше дергать нельзя
источник

ИЛ

Иван Лещенко... in Rust Beginners
Алексей Герасимов
у итератора None признак что он закончился и его в общем случае дольше дергать нельзя
Можно, если он не Fused
источник

АГ

Алексей Герасимов... in Rust Beginners
Иван Лещенко
Можно, если он не Fused
наоброт, если fused
источник

ИЛ

Иван Лещенко... in Rust Beginners
Алексей Герасимов
наоброт, если fused
Последующие вызовы не Fused итератора могут рано или поздно вернуть Some
источник

ИЛ

Иван Лещенко... in Rust Beginners
Иван Лещенко
Последующие вызовы не Fused итератора могут рано или поздно вернуть Some
источник

АГ

Алексей Герасимов... in Rust Beginners
а, это я с футурами перепутал, они вообще паниковать могут, я думал итераторы тоже
источник

Э

Эрик in Rust Beginners
Иван Лещенко
Взять первый элемент итератора при условии что он прошёл через фильтр, иначе вернуть None
Это какой-то оверинжиниринг, iter.next().and_then() попроще будет, нет?
источник

ИЛ

Иван Лещенко... in Rust Beginners
Эрик
Это какой-то оверинжиниринг, iter.next().and_then() попроще будет, нет?
Это та же работа с Option
источник

Э

Эрик in Rust Beginners
Иван Лещенко
Можете подсказать как сделать так, чтобы первые два вызова next вернули None? В данный момент как я понимаю next проходит до конца слайса в поиске подходящего элемента, но я хочу проверить только первый
Если ты будешь возвращать None, то у тебя всё кроме loop { iter.next() } не будет работать, потому что for, for_each и любые поедатели итераторов останавливаются на первом None.
источник

Э

Эрик in Rust Beginners
Иван Лещенко
Это та же работа с Option
Да, но кода меньше писать, чем с адаптерами на итератор.
источник

ИЛ

Иван Лещенко... in Rust Beginners
Эрик
Если ты будешь возвращать None, то у тебя всё кроме loop { iter.next() } не будет работать, потому что for, for_each и любые поедатели итераторов останавливаются на первом None.
Это не совсем понял, взять мне нужно только один элемент
источник

Э

Эрик in Rust Beginners
Иван Лещенко
Это не совсем понял, взять мне нужно только один элемент
Так и зачем тебе адаптеры, если вызов next делает именно это?
источник

ИЛ

Иван Лещенко... in Rust Beginners
Эрик
Так и зачем тебе адаптеры, если вызов next делает именно это?
Но одновременно с этим мне нужно проверить что первый элемент подходит по фильтру
источник

ИЛ

Иван Лещенко... in Rust Beginners
Если я в итератор добавлю фильтр и затем попробую взять следующий элемент, то возьму я первый элемент подходящий по фильтру
источник

Э

Эрик in Rust Beginners
Иван Лещенко
Но одновременно с этим мне нужно проверить что первый элемент подходит по фильтру
Так ты сперва next вызови, а потом фильтр добавляй.
источник

ИЛ

Иван Лещенко... in Rust Beginners
Иван Лещенко
Это та же работа с Option
.
источник

Э

Эрик in Rust Beginners
let f = |_| pred;
let b = iter.next().map(f).unwrap_or(false);
if b {
iter.filter(f).count()
} else {
0
}
источник