【问题标题】:Finding and combining duplicate entries in an array查找和组合数组中的重复条目
【发布时间】:2016-01-05 22:48:44
【问题描述】:

我是新来的,所以如果我的格式不正确(也是 swift 的新手),请纠正我,但基本上我要做的是获取一组日期和数字,如果任何日期相同,请结合数字并入一个条目。

所以这个

//This is how i format the data after i pull it from core data
var dateAndEntry = [(String, Double)]

//i've split them into two seperate arrays for sorting, but I feel like theres a better way i don't know
var dates = ["01/01/2016", "02/01/2016", "02/01/2016", "04/01/2016", "05/01/2016", "06/01/2016","07/01/2016","07/01/2016"]
var entries = [-14,2,8,9,-1,8,25,6]

变成这样

var dates = ["01/01/2016", "02/01/2016", "04/01/2016", "05/01/2016", "06/01/2016","07/01/2016"]
var entries = [-14,10,9,-1,8,19]

我试过这样做,但我只能得到它,以便它创建一个只包含新值的新数组,而不是让我得到重复的值,合并,插入索引然后删除两者中的原始条目数组。

func combineDuplicates(dates: [String]) -> [String]{
    var output: [String] = []
    var checked = Set<String>()
    for date in dates {

        if !checked.contains(date) {
            checked.insert(date)
            output.append(date)
        }
    }
    print(output)
    return output
}

let sorted = combineDuplicates(dates)
print(sorted)

是的,我在谷歌和这里寻找答案,但什么也没找到。

任何我可能错过的其他问题或来源的解决方案、解释、帮助、指针或参考都将不胜感激。

【问题讨论】:

    标签: ios swift


    【解决方案1】:

    这将为您提供一个字典,其中包含日期和值以及每个日期的条目总和:

    dates.enumerate().reduce([String:Int]()) { dict, item in
        var dict = dict
        dict[item.1] = (dict[item.1] ?? 0) + entries[item.0]
        return dict
    }
    // ["06/01/2016": 8, "04/01/2016": 9, "01/01/2016": -14, "05/01/2016": -1, "07/01/2016": 31, "02/01/2016": 10]
    

    【讨论】:

    • 该死的,太慢了。在末尾添加.map { $0 } 将其转回数组。
    • @RMenke 你可以添加一个关于我的答案,以及map 电话。如果人们看不到您的建议来完成我的回答,那将是一种耻辱。
    • 别担心。如果我关心信用或代表,我会将其发布为答案。我只关心形成最佳答案。在这种情况下,它是你的。
    • @RMenke 它的语法是旧的。我只是向 Cristik 展示他可以放弃 var dict = dict 声明 dates.enumerate().reduce([String:Int]()) { var dict, item in
    猜你喜欢
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    • 2022-10-21
    • 2010-09-16
    • 2015-01-22
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    相关资源
    最近更新 更多