Ios Swift-如何从值中获取字典元素的索引?

Ios Swift-如何从值中获取字典元素的索引?,ios,swift,dictionary,swift4,Ios,Swift,Dictionary,Swift4,我正在使用字典数组(Swift 4.1)来存储语言名称和语言代码的值: var voiceLanguagesList: [Dictionary<String, String>] = [] 现在假设我已将元素的值存储在userDefaults中: let languageName = UserDefaults.standard.object(forKey: ControllerConstants.UserDefaultsKeys.languageName) as? String

我正在使用字典数组(Swift 4.1)来存储语言名称和语言代码的值:

var voiceLanguagesList: [Dictionary<String, String>] = []
现在假设我已将元素的值存储在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
。我看了其他答案,但没有找到任何好的解决办法

源代码:


文件链接:

字典无序。它们没有索引。字典有键,它们是一些可散列值

字典中的所有键都是唯一的,但并非所有值都是唯一的

您可以拥有一个带有以下值的
[String:Int]
类型的字典

["a": 1, "b": 1, "c": 1]

在这种情况下,值1的键是什么?任何包含该值的键都可以吗?在这种情况下,您可以循环遍历键/值对,直到找到匹配的值并返回该键,但是没有第一个匹配值,因为正如前面所提到的,字典是无序的。

我不认为需要在这里使用字典。您只需创建一种新的类型语言并按如下方式进行搜索

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")

正如其他人已经说过的,我不认为使用字典数组作为表视图的模型有什么意义。。。但是,如果我理解你的问题,这能帮上忙吗? 问候

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 :(")
}
var testDictArray:[Dictionary]=[]//只是一个测试,一个字典数组
//用示例数据填充字典
testDictArray.append(
[“A0”:“A0”,
“B0”:“B0”,
“C0”:“C0”]
)
testDictArray.append(
[“A1”:“A1”,
“B1”:“B1”,
“C1”:“C1”,
“D1”:“D1”]
)
testDictArray.append(
[“A2”:“A2”,
“B2”:“B2”]
)
//要查找的示例值
让大写=“B2”
设小写=“b2”
//一些循环。。。
var foundedIndex:Int?=无
对于0中的索引。。
字典是键值对的

若要从值中获取字典元素的索引
您可以尝试使用元组数组,如下所示:

let dict = [("key0", "value0"), ("key1", "value1")]
let index = dict.index { $1 == "value1" } ?? 0
print(index)    // 1

希望它有用

我有一系列字典,其中字典的类型为

经过一些研究和尝试,我发现了一些适合我的东西

if let index = yourArray?.firstIndex(
                where: {
                  ($0 as AnyObject)["Title"] as? String == NSLocalizedString("New Location", comment: "")
            }
                )
            {
                print(index)
                //your operations here

            }

PS-($0作为任何对象)[“标题”]作为?字符串是您希望查找的文本。

我真正的问题是我有一个TableView。通过使用字典,我将单元格添加到表中(有疑问)。我在UserDefaults中有一个表单元格内容,它包含在TableView单元格中。我想获取该单元格的indexPath,该单元格包含我在UserDefaults中的值。
字典
不能用作表视图的数据模型,因为字典是无序集合。你在几个方面感到困惑,需要回去研究基本原理。我真正的问题是我有一个桌面视图。通过使用字典,我将单元格添加到表中(有疑问)。我在UserDefaults中有一个表单元格内容,它包含在TableView单元格中。我想得到那个单元格的indexPath,它包含我在UserDefaults中的值。你的评论令人困惑,如果你能详细说明的话,我可以帮你。我不知道你为什么要首先使用字典,因为你的字典只包含一个键值对。对不起,这是字典数组。我更新了问题文件链接:
if let index = yourArray?.firstIndex(
                where: {
                  ($0 as AnyObject)["Title"] as? String == NSLocalizedString("New Location", comment: "")
            }
                )
            {
                print(index)
                //your operations here

            }