【问题标题】:Swift 3 sorting large amounts of data in arraysSwift 3 对数组中的大量数据进行排序
【发布时间】:2017-05-15 15:56:06
【问题描述】:

我有一个包含大量数据的字符串数组,其中只有一些我想要。我使用如下分隔符分隔好的数据:

var result = contentArray[1].components(separatedBy: ",")

这会在结果数组的偶数索引中留下垃圾数据,在奇数索引中留下好的数据。

现在我只想使用好的数据来简化以后的工作。我可以通过使用 for in 循环创建另一个数组来实现这一点...

但这似乎至少是一个额外的步骤。有没有一种方法可以在不创建 2 个数组的情况下对第一个数组中的数据进行排序?当看起来我应该能够在 1 或 2 中完成时,这将使应用程序创建 3 个包含大量数据的数组。我计划使用至少 20 个数据集来执行此操作,这样看起来就多了很多内存中的数组

【问题讨论】:

  • 为什么要过早优化?我的建议是先让它工作,运行一些性能测试,并仅在需要时进行优化。
  • @nathan 好点。我确实倾向于在早期有点烦恼。为什么我不需要做额外的工作?辉煌
  • 请记住,大多数基本 Swift 类型都是复制时变异的。如果您不更改实际数据,您可能只是进行了额外的引用(占用空间小),而不是实际复制所有数据。

标签: arrays swift for-loop stride


【解决方案1】:

你可以这样走。

let filterArray = result.indices.flatMap { $0 % 2 != 0 ? nil : result[$0] }
print(filterArray)

编辑:如果您想将过滤器的输出存储在同一个数组中,请尝试这样。

var result = contentArray[1].components(separatedBy: ",")
result = result.indices.flatMap { $0 % 2 != 0 ? nil : result[$0] }
print(result)

【讨论】:

  • 这不只是创建一个我想避免的第三个数组吗?
  • 谢谢,看起来很棒。我不熟悉 flatMap 语法,编译器正在使用未解析的标识符数组(指向:array[$0])
  • @froggomad 实际上您需要填充结果数组,因此只需使用var 而不是let 声明它即可使其可变,检查编辑后的答案
  • 我明白了,非常感谢。我现在正在研究教程,看看我是否可以在创建第一个数组时做到这一点,所以我总共只创建了一个数组
猜你喜欢
  • 1970-01-01
  • 2017-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多