Skip to content

Instantly share code, notes, and snippets.

@jordanorelli
Created September 3, 2022 20:49
Show Gist options
  • Select an option

  • Save jordanorelli/64d1a2e2602e5ff960c62f40858ac64d to your computer and use it in GitHub Desktop.

Select an option

Save jordanorelli/64d1a2e2602e5ff960c62f40858ac64d to your computer and use it in GitHub Desktop.

Revisions

  1. jordanorelli created this gist Sep 3, 2022.
    63 changes: 63 additions & 0 deletions iterators2.rs
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,63 @@
    // iterators2.rs
    // In this exercise, you'll learn some of the unique advantages that iterators
    // can offer. Follow the steps to complete the exercise.
    // Execute `rustlings hint iterators2` or use the `hint` watch subcommand for a hint.

    // Step 1.
    // Complete the `capitalize_first` function.
    // "hello" -> "Hello"
    pub fn capitalize_first(input: &str) -> String {
    let mut c = input.chars();
    match c.next() {
    None => String::new(),
    Some(first) => format!("{}{}", first.to_uppercase(), c.collect::<String>()),
    }
    }

    // Step 2.
    // Apply the `capitalize_first` function to a slice of string slices.
    // Return a vector of strings.
    // ["hello", "world"] -> ["Hello", "World"]
    pub fn capitalize_words_vector(words: &[&str]) -> Vec<String> {
    // Why are these two lines different? The first one does not compile but the second one does
    // and I don't really understand the error message.
    // words.iter().map(capitalize_first).collect()
    words.into_iter().map(|s| capitalize_first(s)).collect()
    }

    // Step 3.
    // Apply the `capitalize_first` function again to a slice of string slices.
    // Return a single string.
    // ["hello", " ", "world"] -> "Hello World"
    pub fn capitalize_words_string(words: &[&str]) -> String {
    // capitalize_words_vector(words).join("")
    words.iter().map(|s| capitalize_first(s)).collect()
    }

    #[cfg(test)]
    mod tests {
    use super::*;

    #[test]
    fn test_success() {
    assert_eq!(capitalize_first("h"), "H");
    assert_eq!(capitalize_first("hello"), "Hello");
    }

    #[test]
    fn test_empty() {
    assert_eq!(capitalize_first(""), "");
    }

    #[test]
    fn test_iterate_string_vec() {
    let words = vec!["hello", "world"];
    assert_eq!(capitalize_words_vector(&words), ["Hello", "World"]);
    }

    #[test]
    fn test_iterate_into_string() {
    let words = vec!["hello", " ", "world"];
    assert_eq!(capitalize_words_string(&words), "Hello World");
    }
    }
    7 changes: 7 additions & 0 deletions why.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,7 @@
    confused about lines 24 and 25. I'm struggling to understand the difference between this line:

    words.iter().map(capitalize_first).collect()

    and this line:

    words.iter().map(|s| capitalize_first(s)).collect()