枚举和 Switch 语句映射 Swift 中的字符串数组 4
Enum and Switch Statement to Map String Array in Swift 4
我正在使用枚举和 switch 语句尝试将字母组合映射到给定的数字字符串。这类似于 Phone 单词算法,给定一个 phone 数字并且必须找到从该数字映射的可能单词。在这里,我不一定要找到实际的英语单词。而是,只是基本的 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)")
看来你的游乐场坏了,因为你的代码对我有用并打印 ["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"]
我正在使用枚举和 switch 语句尝试将字母组合映射到给定的数字字符串。这类似于 Phone 单词算法,给定一个 phone 数字并且必须找到从该数字映射的可能单词。在这里,我不一定要找到实际的英语单词。而是,只是基本的 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)")
看来你的游乐场坏了,因为你的代码对我有用并打印 ["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"]