Как вычислить количество определенного символа в строке?


#1

Привет. Решаю задачки для закрепления материала. Ломаю голову над одной уже пару дней.

Написать функцию,которая выводит на экран все натуральные числа из диапазона от А до В в записи которых цифра 7 встречается N раз.
При отсутствии чисел с указанными свойствами выдать на экран сообщение “Требуемых чисел нет”.
Границы диапазона А и В и значение N задаются как параметры функции. Объекты типа String можно рассматривать и как массивы символов.

Моих неокрепших мозгов хватило лишь на то, чтобы засунуть в массив все числа содержащие цифру 7, а как посчитать количество семерок в каждом элементе и привязать ее к N не могу понять.

       func natural(a: Int, b: Int, n: Int) {
    let gamut = a...b
  var array = [String]()
    var sevenArray = [String]()
    if gamut.contains(7){
        gamut.forEach{number in array.append(String(number)) }
        }
    if n <= array.count {
        for num in array {
            if num.contains("7") {
                sevenArray.append(num)
               print(num)
            }
    }
    } else { print("Таких чисел не найдено")}

#2
func natural(a: Int, b: Int, n: Int) {
    let result = (a...b).filter { "\($0)".range(of: "(.*7{1}.*){\(n)}", options: .regularExpression) != nil }
    result.isEmpty ? print("Пусто") : print(result)
}

natural(a: 0, b: 800, n: 2)

#3

Благодарю за ответ. А что значит $0? Номер индекса в диапазоне? И вот эту запись не пойму "(.*7{1}.*){\(n)}"


#4

Сокращенные имена параметров

Swift автоматические предоставляет сокращённые имена для однострочных замыканий, которые могут быть использованы для обращения к значениям параметров замыкания через имена $0, $1, $2, и так далее.

Если вы используете эти сокращенные имена параметров с вашим замыкающим выражением, вы можете пропустить список параметров замыкания из его объявления, а количество и тип сокращенных имен параметров будет выведено из ожидаемого типа метода. Ключевое слово in также может быть опущено, поскольку замыкающее выражение полностью состоит из его тела:

reversedNames = names.sorted(by: { $0 > $1 })
Здесь, $0 и $1 обращаются к первому и второму String параметру замыкания.

Это регулярное выражение.