skip to Main Content

I’m beginner trying to implement this logic can anyone suggest the logic.

func findLetterOccurence(Letter: String){
    let array = ["Data", "program", "questions", "Helpful"]

    ///Logic to find the given letter occurences in string array

    print("(Letter) occured in (count) times")
}

Expected Output: a occured in 3 times

I’ve tried as below:

var count = 0
for i in array {
   var newArray.append(i)
   count = components(separatedBy: newArray).count - 1
}

But I don’t understand what exactly the logic inside components(separatedBy:) ? I mean without higher function how can we implment logic here.

3

Answers


  1. try something like this:

     func findLetterOccurence(letter: String) {
        var count = 0
        for word in array { count += word.filter{ String($0) == letter}.count }
        print("--> (letter) occured in (count) times")
    }
    

    You have to adjust if you want case insensitive, like this:

    func findLetterOccurence(letter: String) {
        var count = 0
        for word in array { count += word.filter{ String($0).lowercased() == letter.lowercased()}.count }
        print("--> (letter) occured in (count) times")
    }
    
    Login or Signup to reply.
  2. add this extension to find occurance of latter in string

    extension String {
        func numberOfOccurrencesOf(string: String) -> Int {
            return self.components(separatedBy:string).count - 1
        }
    }
    

    use it for array

            func findLetterOccurence(Letter: String){
            let array = ["Data", "program", "questions", "Helpful"]
            var number = 0
            for str in array{
                var l = Letter
    //            uncomment it to use code for upper case and lower case both
    //            l = str.lowercased()
                
                number = number + str.numberOfOccurrencesOf(string: l)
            }
            print("(Letter) occured in (number) times")
        }
    
    Login or Signup to reply.
  3. A couple of ways.

        @discardableResult func findLetterOccurence(letter: String) -> Int {
        
        let array = ["Data", "program", "questions", "Helpful"]
        var count = 0
        // here we join the array into a single string. Then for each character we check if the lowercased version matches the string lowercased value. 
        array.joined().forEach({ if $0.lowercased() == letter.lowercased() { count += 1} } )
        
        print("(letter) occured in (count) times")
        
        return count
    }
    

    You could also do a sensitive compare and leave the casing alone
    by saying

    array.joined().forEach({ if String($0) == letter { count += 1} } )
    

    Another way would be this

    //here our argument is a character because maybe we just want to search for a single letter.
        @discardableResult func findLetterOccurence2(character: Character) -> Int {
        
            let array = ["Data", "program", "questions", "Helpful"]
       
        //again join the array into a single string. and reduce takes the `into` parameter and passes it into the closure as $0 in this case, and each element of the string gets passed in the second argument of the closure.
            let count = array.joined().reduce(into: 0) {
               $0 += $1.lowercased() == letter.lowercased() ? 1 : 0
            }
            print("(letter) occured in (count) times")
        
            return count
        }
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search