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

Reply via email to