Hehe, pretty ugly too :-), but thanks. 12. 9. 2014 v 14:29, Vladimir Matveev <dpx.infin...@gmail.com>:
> Hi, Ollie, > > This variant is terser, but it could be even more readable if there were some > kind of connect() for iterators. It surprised me that there is no such thing > in Rust iterators. It would be possible to use some kind of interleave() for > iterators for the same purpose, but there is no such thing as well. Hence I > had to use fold() and then pop_char() which is rather nasty as it breaks > method chain. > > On the other hand, this variant performs less allocations than your original > version because the resulting string is allocated in advance. > > use std::char; > > fn name_from_file(file: String) -> String { > let mut r = file.as_slice().split('-') > .map(|w| > char::to_uppercase(w.char_at(0)).to_string().append(w.slice_chars(1, > w.len()))) > .fold( > String::with_capacity(file.len()+1), > |r, w| r.append(w.as_slice()).append(" ") > ); > r.pop_char(); > r > } > > fn main() { > let hypenated_string = "hello-there".to_string(); > let capitalized_string = name_from_file(hypenated_string); > println!("{}", capitalized_string); > } > > See it in action here: http://is.gd/UKKB96 > > BTW, I suggest you to use Stackoverflow [1] (preferred) or Reddit [2] to ask > questions like this. The active community there is much larger than here, so > you can get an answer quicker. > > [1]: http://stackoverflow.com/questions/tagged/rust > [2]: http://www.reddit.com/r/rust/ > > >> On 12 сент. 2014 г., at 15:35, Oldřich Vetešník <oldrich.vetes...@gmail.com> >> wrote: >> >> Hello, >> >> this is probably going to sound silly, but can this be written better? >> I’d like to turn “hello-there” into “Hello There”. >> I was thinking about something along the lines of split -> map -> capitalize >> -> join but the capitalization seems kind of awful to me. >> >> use std::char; >> >> fn name_from_file(file: String) -> String { >> let mut words: Vec<&str> = file.as_slice().split('-').collect(); >> let mut cap_words = Vec::new(); >> >> for word in words.mut_iter() { >> let first = char::to_uppercase(word.char_at(0)).to_string(); >> let rest = word.slice_chars(1, word.len()); >> >> let cap_word = first.append(rest); >> cap_words.push(cap_word); >> } >> >> cap_words.connect(" ") >> } >> >> fn main() { >> let hypenated_string = "hello-there".to_string(); >> let capitalized_string = name_from_file(hypenated_string); >> println!("{}", capitalized_string); >> } >> >> >> Thanks, >> Ollie >> _______________________________________________ >> Rust-dev mailing list >> Rust-dev@mozilla.org >> https://mail.mozilla.org/listinfo/rust-dev > _______________________________________________ Rust-dev mailing list Rust-dev@mozilla.org https://mail.mozilla.org/listinfo/rust-dev