Перечислите и переключите оператор для сопоставления строкового массива в Swift 4 - PullRequest
0 голосов
/ 31 января 2019

Я использую оператор enum и switch в попытке отобразить буквенные комбинации в заданную строку чисел.Это похоже на алгоритм телефонных слов, где вам дается номер телефона, и вы должны найти возможные слова, сопоставленные с этим номером.Здесь я не пытаюсь найти настоящие английские слова, обязательно.Скорее, просто базовые String букв.

Приведенный ниже код почему-то не печатается в игровых площадках.

enum Dialpad : Int {
  case zero, one, two, three, four

  var letters : [String] {
    switch self {
    case .zero,.one:
      return []
    case .two:
      return ["a","b","c"]
    case .three:
      return ["d","e","f"]
    case .four:
      return ["g","h","i"]
    }
  }
}

Вот рекурсивная функция, объединяющая массивы Characterв String массивы.

func comboArray(_ arrays:[[String]], n:Int,set:inout Set<String>) {
  if n >= arrays.count { return }
  let array = arrays[n]
  if set.isEmpty {
    set = Set(array)
  } else {
    set.forEach { (c1) in
      array.forEach({ (c2) in
        set.insert(c1+c2)
      })
      if !array.isEmpty {
        set.remove(c1)
      }
    }
  }
  comboArray(arrays, n: n+1, set: &set)
}

Эта функция должна принимать число и сопоставлять его с соответствующими буквами клавиатуры набора номера.

func dialPadLetters(number:Int) -> Set<String> {
  let stringNumber = String(number)
  var arrayLetter : [Array<String>] = []
  for c in stringNumber {
    let n = Int(String(c))!
    let letters = Dialpad(rawValue: n)!.letters
    arrayLetter.append(letters)
  }
  var mySet : Set<String> = []
  comboArray(arrayLetter, n: 0, set: &mySet)
  return mySet
}

Затем я пытаюсь напечатать возможные комбинации букв a, b,c, d, e, f, g, h, i, поскольку заданные номера панели набора номера - 0, 1, 2, 3, 4. (Обратите внимание, что 0 и 1 не содержат букв панели набора номера.)

let theSet = dialPadLetters(number: 1234)

print("\(theSet)")

1 Ответ

0 голосов
/ 31 января 2019

Кажется, ваша игровая площадка сломана, потому что ваш код работает для меня и печатает ["adh", "bdg", "afi", "bdi", "beh", "bdh", "bfg", "adg", "bfi", "aeh", "cdi", "aeg", "bfh", "cfi", "afg", "cfg", "aei", "afh", "bei", "ceg", "cdh", "cei", "adi", "cdg", "ceh", "cfh", "beg"]

...