Hehe, pretty ugly too :-), but thanks.
12. 9. 2014 v 14:29, Vladimir Matveev <[email protected]>:
> 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 <[email protected]>
>> 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
>> [email protected]
>> https://mail.mozilla.org/listinfo/rust-dev
>
_______________________________________________
Rust-dev mailing list
[email protected]
https://mail.mozilla.org/listinfo/rust-dev