通过Swift中的键获取字典中项目的索引

通过Swift中的键获取字典中项目的索引,swift,Swift,我这样做是为了在字典中循环,直到找到匹配的键为止。我的字典定义为[Int:String] var index = 0 for (key, value) in mylist! { if key == property.propertyValue as! Int { // use index here } index += 1 } 有更好的方法吗?我看到了一些过滤的例子(类似于下面的例子),但我不知道如何使用字典。我可以用这样的方法来查找项目的索引吗?还是有

我这样做是为了在字典中循环,直到找到匹配的键为止。我的字典定义为[Int:String]

var index = 0
for (key, value) in mylist! {
    if key == property.propertyValue as! Int {
        // use index here
    }
    index += 1
}
有更好的方法吗?我看到了一些过滤的例子(类似于下面的例子),但我不知道如何使用字典。我可以用这样的方法来查找项目的索引吗?还是有别的办法

mylist.filter{$0.key == 1}
更新: 这项工作:

let index = Array(mylist!.keys).index(of: 1)
但这并不是:

let index = mylist!.index(forKey: 1)

看来他们两个都应该工作。我想知道为什么第二本没有。

字典是无序的集合类型,没有索引

您可以通过键直接获取值

let value = mylist[property.propertyValue as! Int]

如果我理解正确,您可以这样做:

let myList = [
    2: "Hello",
    4: "Goodbye",
    8: "Whats up",
    16: "Hey"
]

let index = Array(myList.keys).index(of: property.propertyValue)
然后再找到你要找的钥匙

let key = Array(myList.keys)[index!]
正如在其他答案中所说,字典可能不是您要寻找的数据结构。但这应该能回答你提出的问题。

给出你的字典

let dict = [1:"a", 2:"b", 3: ""]
您可以通过简单的编写来提取给定键(例如,`1)的索引

let indexForKey1 = dict.index(forKey: 1)
获取所有索引 您还可以构建一个字典,其中它们的键是索引,值是dict的键

let indexes = dict.keys.map { dict.index(forKey: $0) }
顺便问一下:你真正需要做什么


字典键未排序。做你正在尝试的事情是没有意义的。为什么你需要一个“索引”?为什么不简单地使用subscripting:
如果让value=mydict[key]{…}
?似乎您已经根据您对下面答案的评论发布了一个问题。你应该重做你的问题,使之与你试图解决的实际问题有关(设置选择器视图)。字典是一个集合,因此有索引:)甚至还有一个
索引(forKey:)
方法。伪索引,Martin,因为它符合特定的收集协议,将字典映射到引擎盖下的元组。我不需要这个值。我只需要索引,以便将UIPickerView设置为正确的项。for循环可以工作,但对于我所需要的东西来说似乎很麻烦。我是这样设置我的选择器的:picker.selectRow(index,inComponent:0,animated:false)@Primico:听起来好像你依赖于字典条目的特定顺序。您可能应该改为使用数组。
Dictionary.Index
vadian的“伪索引”是什么?至少对于本机存储,索引对应于哈希表中给定存储桶的偏移量。听起来像是一个合适的索引;)