owl*_*ipe 0 arrays ios swift swift2
我对迅捷相对较新.我试图制作一个程序,它采用wordlist(以字符串数组的形式)并删除不包含用户选择的字母的字符串.因此,如果词汇表是["apple","banana","cherry","date","endive"],并且用户选择字母"a"(这是变量"centerletter"),"apple", "香蕉"和"日期"将被退回,因为他们做包含字母a.当输入的数组(wordlist)是像["apple","banana"]这样的标准数组时,此代码有效.但是,我对此代码的实际用途是对英语中的每个单词进行排序,如我的文件"words.txt"(我的swift项目中的一个文件)中所示.
我已将words.txt中的每个单词(由/ n分隔)分配到wordlist,如下所示(这是函数):
func arrayFromContentsOfFileWithName(fileName: String) -> [String]? {
let path = NSBundle.mainBundle().pathForResource("words", ofType: "txt")
var fileContents: String? = nil
do {
fileContents = try String(contentsOfFile: path!, encoding: NSUTF8StringEncoding)
return fileContents!.componentsSeparatedByString("\n")
} catch _ as NSError {
return nil
}
}
Run Code Online (Sandbox Code Playgroud)
我将wordlist分配给arrayFromContentsOfFileWithName("words.txt")的结果,如下所示:
var wordlist = arrayFromContentsOfFileWithName("words.txt")
Run Code Online (Sandbox Code Playgroud)
然后我用这段代码捣乱wordlist(试图取出不包含用户选择的字母的单词列表中的每个单词(在我的例子中为"a").这段代码适用于像["apple","banana"这样的标准数组],但不是在使用函数arrayFromContentsOfFileWithName创建的数组上.
let centerlet:Character = Character(Array(arrayLiteral: centerletter.text!)[0])
Run Code Online (Sandbox Code Playgroud)
// centerlet是用户选择的字母.
for var i = 0; i < wordlist?.count; i++ {
if wordlist![i].characters.contains(centerlet) {
print("I am leaving in \(wordlist![i]) because it contains the center letter")
} else {
print("I removed \(wordlist![i]) because it did not have the center letter.")
wordlist?.removeAtIndex(i)
}
}
Run Code Online (Sandbox Code Playgroud)
如何将words.txt中的所有单词转换为标准的swift数组,以便我可以删除所有不包含某个字母的数组中的每个单词?谢谢.
在使用索引迭代列表时,您将删除列表中的项目.在枚举列表时修改列表通常会导致灾难,并且通常会产生意外结果.
一个简单的过滤器怎么样?
let filteredList = wordlist.filter { !$0.characters.contains(letter) }
Run Code Online (Sandbox Code Playgroud)