【发布时间】:2018-10-02 10:04:53
【问题描述】:
我正在尝试使用以下 Swift 代码从给定单词创建一个字母数组(我有一个用于 allWords 的单词数组,但为简单起见,我现在只是在其中添加了一个示例单词):
let allWords = ["Leopards"]
var arrayOfLetters = Array(allWords[0])
let everyPossibleArrangementOfLetters = permute(list: arrayOfLetters)
func permute(list: [String], minStringLen: Int = 3) -> Set<String> {
func permute(fromList: [String], toList: [String], minStringLen: Int, set: inout Set<String>) {
if toList.count >= minStringLen {
set.insert(toList.joined(separator: ""))
}
if !fromList.isEmpty {
for (index, item) in fromList.enumerated() {
var newFrom = fromList
newFrom.remove(at: index)
permute(fromList: newFrom, toList: toList + [item], minStringLen: minStringLen, set: &set)
}
}
}
var set = Set<String>()
permute(fromList: list, toList:[], minStringLen: minStringLen, set: &set)
return set
}
我从:Calculate all permutations of a string in Swift获得此代码
但出现以下错误: 无法将类型“[String.Element]”(又名“Array”)的值转换为预期的参数类型“[String]”
我尝试了以下方法,它有效,但每个单词需要超过 10 秒(取决于重复字母的数量),我希望找到更好的解决方案。
var arrayOfLetters: [String] = []
for letter in allWords[0] {
arrayOfLetters.append(String(letter))
}
let everyPossibleArrangementOfLetters = permute(list: arrayOfLetters)
我无法让以下解决方案正常工作,尽管我认为我承诺我无法通过数组中项目的 productID 名称,而我的数组项目没有命名...... Migration from swift 3 to swift 4 - Cannot convert String to expected String.Element
我还在创建另一个数组并检查每个单词以确保它们的有效性,我遇到了同样的错误,我以同样的方式纠正了 array.append,这在那个位置增加了更多的时间好吧。
var everyPossibleArrangementOfLettersPartDeux: [String] = []
for word in everyPossibleArrangementOfLetters {
everyPossibleArrangementOfLettersPartDeux.append(word)
}
numberOfRealWords = possibleAnagrams(wordArray: everyPossibleArrangementOfLettersPartDeux)
func possibleAnagrams(wordArray: [String]) -> Int {
func isReal(word: String) -> Bool {
let checker = UITextChecker()
let range = NSMakeRange(0, word.utf16.count)
let misspelledRange = checker.rangeOfMisspelledWord(in: word, range: range, startingAt: 0, wrap: false, language: "en")
return misspelledRange.location == NSNotFound
}
var count = 0
for word in wordArray {
if isReal(word: word) {
count += 1
//print(word)
}
}
return count
}
我希望对 array.append 的相同替换在这两个地方都可以工作。
【问题讨论】:
-
要解决此错误,请注意,如果您尝试将
[myArray]传递到您打算传递myArray的位置,则会出现此错误。改正那个错字,你就成功了!