对元素进行排序和组合使其独一无二

Sort and combine elements to be unique

我有一堆代币存储在 combinedCoinsFromAllWalles 中,我按谁包含最大货币价值对它们进行排序,如下所示:

let sortedCoins = combinedCoinsFromAllWalles.sorted() { Double([=10=].token!.quote!) > Double(.token!.quote!) }

问题是某些标记按名称重复,例如,在该排序中我可以在 [=13=].token!.name

上有 2 个具有相同名称的标记

同时组合这些相似的代币并增加它们的价值的最有效方法是什么?像这样:

token A (named BTC)
token B (named BTC)
token C (named ETH)

我想在筛选时对令牌 A 和 B 引用 ([=14=].token!.quote! + [=14=].token!.quote!) 求和。

如何以最有效的方式做到这一点?

您的示例中的第一种排序是一种浪费,因为您没有先将相似硬币的所有不同来源组合起来,然后顺序可能会改变。

你应该:

  1. 总硬币价值
  2. 按所需顺序排序

执行此操作的一种简单方法是创建字典,在遍历数据时添加新硬币或求和。然后将字典转换回数组并按您喜欢的方式排序。

例如:

var dict: [String: Float] = []
for each in combinedCoinsFromAllWalles {
    if dict.contains(each.token) {
        dict[each.token] += each.quote
    }else{
        dict[each.token] = each.quote
    }
}

let sortedCoinValueArray = dict.sorted(by: [=10=].1 < .1)

生成的数组是 key-value 对的数组,因此您可以像这样迭代它:

for (key, value) in sortedCoinValueArray {
    print("${key}:   ${value}"
}