如何通过创建wordlist文件的数组来确定数组中的每个元素是否包含某个字母(swift 2)

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数组,以便我可以删除所有不包含某个字母的数组中的每个单词?谢谢.

Mun*_*ndi 5

在使用索引迭代列表时,您将删除列表中的项目.在枚举列表时修改列表通常会导致灾难,并且通常会产生意外结果.

一个简单的过滤器怎么样?

let filteredList = wordlist.filter { !$0.characters.contains(letter) }
Run Code Online (Sandbox Code Playgroud)