Arrays 获取数组中每个字符串最后一次出现的索引
我有一个数组,它以字符串格式存储大量不同的名称。可能有重复的Arrays 获取数组中每个字符串最后一次出现的索引,arrays,swift,Arrays,Swift,我有一个数组,它以字符串格式存储大量不同的名称。可能有重复的 let myArray = ["Jim","Tristan","Robert","Lexi","Michael","Robert","Jim"] 在这种情况下,我不知道从解析服务器获取数据后数组中会有什么值。因此每次导入的数据都会不同。只是一个随机名字的列表 假设我不知道数组中的所有字
let myArray = ["Jim","Tristan","Robert","Lexi","Michael","Robert","Jim"]
在这种情况下,我不知道从解析服务器获取数据后数组中会有什么值。因此每次导入的数据都会不同。只是一个随机名字的列表
假设我不知道数组中的所有字符串,我需要找到数组中每个字符串最后一次出现的索引
例如:
如果这是我的数组
let myArray = ["john","john","blake","robert","john","blake"]
我想要每个事件的最后一个索引,所以
blake = 5
john = 4
robert = 3
在Swift中执行此操作的最佳方式是什么
通常,我会为数组中的每个项目创建一个变量,然后在数组中递增并计算项目,但在这种情况下,数组中有数千个项目,它们的值未知。创建一个包含元素及其索引的数组:
zip(myArray, myArray.indices)
然后将
减少到一个字典中,其中键是数组元素,值是索引:
let result = zip(myArray, myArray.indices).reduce(into: [:]) { dict, tuple in
dict[tuple.0] = tuple.1
}
(myArray.enumerated()
返回偏移量,而不是索引,但是它在这里也可以工作,而不是zip
,因为数组有一个Int
零基索引)
编辑:
Dictionary(u:uniquingKeysWith:)
方法(@Jessy's answer)是一种更干净的方法新开发人员的答案是一种方法。除此之外,标准库已经有了这样的解决方案,所以请改用它
字典(
[“约翰”、“约翰”、“布莱克”、“罗伯特”、“约翰”、“布莱克”]
.经点算()
.map{($0.element,$0.offset)}
) { $1 }
或者如果你已经在其他地方收集了
Dictionary(zip(collection,collection.index)){$1}
只是为了好玩,这是一个简单的解决方案,而且可能是最短的解决方案(简洁而清晰,还是相反?:p)
myArray.enumerated().reduce(到:[:]){$0[$1.0]=$1.1}
你会怎么做?告诉我们,我们会告诉你这是不是最好的方法;)创建一个[String:Int]
字典枚举
数组,并将索引
设置为键元素
的值。最终,您将分别获得所有名称及其最新索引。枚举
返回偏移量,而不是索引。当然,这对数组是有效的,但这不是一种一刀切的方法来获取索引问题是关于array
@NewDevenumerated
调用数组返回EnumeratedSequence
,其中偏移量始终是Int
,实际上是一个索引。我知道-我也评论了很多。。。但我的评论是指它是“做这件事的方式”对于数组的特殊情况,它是有效的,但我不会将其称为内置的wayEdited来解释whateva集合
。因为它重新发明了带有轮子的uniquingKeysWith@杰西,是的,uniquingKeysWith
也会有用的。。。