我使用字典数组(Swift 4.1)来存储语言名称和语言代码的值:
var voiceLanguagesList: [Dictionary<String, String>] = []
我通过这种方法附加字典数组:
for voice in AVSpeechSynthesisVoice.speechVoices() {
let voiceLanguageCode = (voice as AVSpeechSynthesisVoice).language
if let languageName = Locale.current.localizedString(forLanguageCode: voiceLanguageCode) {
let dictionary = [ControllerConstants.ChooseLanguage.languageName: languageName, ControllerConstants.ChooseLanguage.languageCode: voiceLanguageCode]
voiceLanguagesList.append(dictionary)
}
}
现在让我说我在userDefaults中存储了元素的值:
let languageName = UserDefaults.standard.object(forKey: ControllerConstants.UserDefaultsKeys.languageName) as? String
let languageCode = UserDefaults.standard.object(forKey: ControllerConstants.UserDefaultsKeys.languageCode) as? String
我希望得到值为languageName
和languageCode
的词典的索引。我经历了其他答案,但没有找到任何好的解决方案。
SourceCode:https://github.com/imjog/susi_iOS/tree/voice
答案 0 :(得分:1)
字典无序。他们没有索引。字典有密钥,这些密钥具有一定的可用值。
字典中的所有键都是唯一的,但并非所有值都是唯一的。
您可以拥有类型为[String:Int]
的词典,其值为
["a": 1, "b": 1, "c": 1]
在这种情况下,值1的关键是什么?任何包含该值的键都可以吗?在这种情况下,您可以遍历键/值对,直到找到匹配的值并返回该键,但是没有第一个匹配值,因为如上所述,字典是无序的。
答案 1 :(得分:0)
我认为不需要在这里使用字典。您只需创建一种新类型语言并按以下方式进行搜索。
struct Language: Equatable {
var code: String
var name: String
}
var languages = [Language]()
languages.append(Language(code: "1", name: "English"))
languages.append(Language(code: "2", name: "Hindi"))
let languageToSearch = Language(code: "2", name: "Hindi")
print(languages.index(of: languageToSearch) ?? "Not found")
答案 2 :(得分:0)
正如其他人已经说过的那样,我没有看到使用一系列词典作为你的桌面视图的模型......但是,如果我理解你的问题,这有用吗? 问候
var testDictArray: [Dictionary<String, String>] = [] // Just a test, an array of dictionaries
// Filling the dictionary with example data
testDictArray.append(
["A0":"a0",
"B0":"b0",
"C0":"c0"]
)
testDictArray.append(
["A1":"a1",
"B1":"b1",
"C1":"c1",
"D1":"d1"]
)
testDictArray.append(
["A2":"a2",
"B2":"b2"]
)
// The example values you want to find
let upperCase = "B2"
let lowerCase = "b2"
// Some loops...
var foundedIndex: Int? = nil
for index in 0..<testDictArray.count {
for (key, value) in testDictArray[index] {
if (key, value) == (upperCase, lowerCase) {
foundedIndex = index
break
}
}
if foundedIndex != nil {
break
}
}
// Printing result
if let myIndex = foundedIndex {
print("The index is \(myIndex)") // The example returns 2
} else {
print("No index found :(")
}
答案 3 :(得分:0)
词典是键值配对
如果要从value获取Dictionary元素的索引。
你可以试试下面的元组数组:
let dict = [("key0", "value0"), ("key1", "value1")]
let index = dict.index { $1 == "value1" } ?? 0
print(index) // 1
希望它有用!
答案 4 :(得分:0)
我有一组字典,其中字典的类型为<String,Any>
。
经过一番研究和尝试,我发现了一些对我有用的东西。
if let index = yourArray?.firstIndex(
where: {
($0 as AnyObject)["Title"] as? String == NSLocalizedString("New Location", comment: "")
}
)
{
print(index)
//your operations here
}
PS-($ 0为AnyObject)[“ Title”]为?字符串是您希望找到的文本。