【问题标题】:Swift: matching separate characters from a string with values in a dictionarySwift:将字符串中的单独字符与字典中的值匹配
【发布时间】:2017-10-10 14:20:49
【问题描述】:

我想将用户输入中的单独字符与字典中的值进行匹配。用户在文本字段中键入一些内容,然后将其转换为与他们刚刚键入的字母相关的一组单词。 例如,如果有人键入“Hello”,则应从字典中对单词中的每个字母(在本例中为 5 个)进行匹配,从而输出五个单词:单词“Hello”中的每个字母对应一个。

这是我的字典(为方便起见,只是一小部分,它包含字母表中的所有字母):

let dict:[String:String] = ["A":"Awesome",
                            "B":"Bravo",
                            "C":"Cool"]

inputField(即UITextField),我将文本转换为单个字符的数组:

let textString = inputField.text
let arrayOfString = Array(textString.characters)

我猜我需要使用 for-in 循环遍历我的字典,但我不确定如何处理这个问题。我应该使用数组吗?甚至.characters 来获取单个字母?

【问题讨论】:

标签: arrays swift string dictionary


【解决方案1】:

为了保持原始单词字母的顺序:

let dict:[String:String] = ["A":"Awesome",
                                "B":"Bravo",
                                "C":"Cool"]
let words = "AbCd".uppercased().characters.flatMap { dict[String($0)] }
print(words) // ["Awesome", "Bravo"]

请记住,此解决方案只是跳过丢失的字母 - 不确定这是否是您想要的

【讨论】:

  • 您可以将地图和平面地图合并在一起——let words = "AbCd".uppercased().characters.flatMap { dict[String($0)] }。虽然dict 应该是[Character: String]
【解决方案2】:

如果您假设单词的第一个字母应该是键,您可以通过将字典构建为从字符串数组中的字符到字符串来简化自己:

import Foundation

let words = [
    "Awesome",
    "Bravo",
    "Cool"]

let dict = words.reduce([Character:String]()) { dict, word in
    guard let c = word.lowercased().characters.first else { return dict }
    var mutDict = dict
    mutDict[c] = word
    return mutDict
}

然后通过以与字典键相同的方式规范化用户输入来查找单词(我在示例中是小写的),然后进行平面映射以丢弃任何不匹配的内容。

let wordsMatchingUserInput = userInput.lowercased().characters.map { dict[$0] }.flatMap { $0 }

然后加入他们

let outputString = wordsMatchingUserInput.joined(separator: " ")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-28
    • 1970-01-01
    • 2014-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-06
    • 1970-01-01
    相关资源
    最近更新 更多