iOS Swift:跟踪和存储数组中所有重复值的索引?

时间:2017-08-06 23:35:47

标签: ios arrays swift

我最近问过这个问题:iOS Swift: How to store the index of all duplicate values in array?

我收到了问题的确切答案,但我发现我无法用它来实现我的代码中所需的内容。

我正在尝试存储Date数组的任何重复值的所有索引,并存储在另一个数组[ [Int] ]中。

例如,这是我的Date数组:

let dates = [2016-01-02 08:00:00 +0000, 2016-01-02 08:00:00 +0000,
             2016-02-02 08:00:00 +0000, 2016-03-02 08:00:00 +0000, 
             2016-05-01 08:00:00 +0000, 2016-05-01 08:00:00 +0000]

我想要做的是,与我之前的问题类似,是将所有重复Date值的所有索引存储到一个单独的数组中。

例如,以下数组将包含:

repeatedIndices = [ [0, 1], [2], [3], [4, 5] ]

其中,索引01包含重复日期2016-01-02 08:00:00 +0000,而索引45包含重复日期2016-05-01 08:00:00 +0000

我之前的问题有一个答案提供了[ String: [Int] ],并且作为初学者,我不知道如何操纵它来处理我的代码,因为字典无序我需要一个有序数组。

如有必要,请将其标记为重复,但我不想编辑问题并取消标记答案,因为这样会不公平。

谢谢。

1 个答案:

答案 0 :(得分:1)

在您的示例值中使用[Date:[Int]]字典

var duplicatedDict : [Date:[Int]] = [:]

for (index,date) in datesArray.enumerated() {
            if(duplicatedDict[date] == nil)
            {
                duplicatedDict[date] = [index]
            }else
            {
                duplicatedDict[date]?.append(index)
            }
        }

debugPrint(duplicatedDict)

到目前为止,我们在控制台

中有这么好的结果
  

[2016-02-02 08:00:00 +0000:[2],2016-05-01 08:00:00 +0000:[5,6],2016-03-02 08:00:00 +0000:[3,4],2016-01-02 08:00:00 +0000:[0,1]]

然后我们需要遍历排序的字典键并将每个键数组中的值添加到数组

func returnValuesOrdered() ->[[Int]]{

        var result : [[Int]] = []

        for key in duplicatedDict.keys.sorted(by: {$0 < $1})
        {
            result.append(duplicatedDict[key]!)
        }

        debugPrint(result)
        return result
    }

导致控制台

  

[[0,1],[2],[3,4],[5,6]]

希望这有助于你