Георги качи първо решение на 18.10.2017 23:29 (преди почти 8 години)
Задачата ти е 15/15, добра работа :). Не съм учуден, разбира се, ти си от ветераните.
Ако искаш да пробваш интересна вариация на задачата -- опитай да имплементираш sentence_endings
без да алокираш динамична памет във вектор. Би могъл да си направиш custom итератор за целта. Моят опит замества целия метод с това:
fn sentence_endings(&self) -> SentenceIterator {
SentenceIterator { chars: self.string.chars(), in_sentence: false }
}
Имплементацията на SentenceIterator
е това, с което можеш да си поиграеш. Разбира се, може и по различен начин да пробваш, просто давам идея в случай, че ти е скучно :). Имай предвид, че ще трябва мъничко да поръсиш тук и там lifetimes, за да може Chars
тип да се запази като поле в SentenceIterator. Ако не ти се рови в момента (или не искаш да се spoil-ваш :)), може да почакаш да стигнем дотам в лекциите.
Мерси, ще си поиграя с итераторите :)
В интерес на истината, като писах sentence_endings
много ми се искаше да yield
-на нещо, но доколкото разбирам няма coroutine-и в rust. Колко идиоматично е в Rust да се прави итератор vs да се връща вектор? Бих предположил, че първото се среща по-често, но пък е повече усилие за имплементиране, поне на пръв поглед.
Метода с експлицитен
filter
работи супер. Друго нещо, което би могъл да използваш конкретно в случая с низове, еmatches
метода на&str
: https://doc.rust-lang.org/std/primitive.str.html#method.matches.Конкретния метод би се заместил със
self.string.matches(char::is_alphabetic).count()
Я, този метод съм го пропуснал :) Мерси!