Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 获取数组中每个字符串最后一次出现的索引_Arrays_Swift - Fatal编程技术网

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
@NewDev
enumerated
调用数组返回
EnumeratedSequence
,其中偏移量始终是
Int
,实际上是一个索引。我知道-我也评论了很多。。。但我的评论是指它是“做这件事的方式”对于数组的特殊情况,它是有效的,但我不会将其称为内置的wayEdited来解释whateva
集合
。因为它重新发明了带有轮子的
uniquingKeysWith@杰西,是的,
uniquingKeysWith
也会有用的。。。