【问题标题】:Enum and Switch Statement to Map String Array in Swift 4Enum 和 Switch 语句在 Swift 4 中映射字符串数组
【发布时间】:2019-01-30 23:52:37
【问题描述】:

我正在使用 enum 和 switch 语句来尝试将字母组合映射到给定的数字字符串。这类似于电话词算法,其中给您一个电话号码,并且必须找到从该号码映射的可能单词。在这里,我不一定要找到实际的英语单词。而是,只是基本的String 字母。

由于某种原因,下面的代码没有在 Playgrounds 中打印。

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)")

【问题讨论】:

  • WFM 和打印["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"]
  • WFM 是什么意思?
  • @swiftcoder,可能是works for me,因为代码对我来说也很好

标签: algorithm enums switch-statement swift4


【解决方案1】:

看来你的操场坏了,因为你的代码对我有用并且打印出["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"]

【讨论】:

    猜你喜欢
    • 2013-04-06
    • 2017-03-04
    • 2021-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多