【问题标题】:Sort array twice, save first sort and append second sort对数组进行两次排序,保存第一次排序并追加第二次排序
【发布时间】:2018-11-06 16:54:43
【问题描述】:

我有var array: [Double] = [0.0, 1.000002, 0.0, 0.0]

我想对我的数组进行排序。第一次我需要按我的优先级排序,像这样:

secondElement: 1.000002

firstElement: 0.0

thirdElement: 0.0

fourthElement: 0.0

后来我需要按 arc4random 进行第二次排序,但需要保存第一次排序(top of all 上的 var2。其他元素按 arc4random 排序)。我想看到这样的数组:

secondElement: 1.000002

thirdElement: 0.0

firstElement: 0.0

fourthElement: 0.0

secondElement: 1.000002

thirdElement: 0.0

fourthElement: 0.0

firstElement: 0.0

【问题讨论】:

  • "var array: [String: Double]" 那是字典,不是按定义排序的。
  • 是的,我的错,解决了问题
  • 如果我们可以假设你有一个数组而不是一个字典,你可以排序(你试过了吗?),一旦完成,你可以得到第一个项目并用其余的做一个子数组,随机化它,然后通过首先添加前一个第一个来重建数组。
  • 我第一次只排序,第二次我不知道怎么做
  • 为了更好地理解,使用var array: [Double] = [0.3, 0.4, 0.2, 0.1] 会更容易,这样您就不必解释“thirdElement”之类的了。

标签: arrays swift sorting


【解决方案1】:

你可以这样做:

var array: [Double] =  [0.0, 1.000002, 0.0, 0.0]
let sorted: [Double] = array.sorted(by: >)
let sortAndRandomize: [Double] = sorted.prefix(1) + sorted.dropFirst().shuffled()

如果你想改变原始数组,那么:

var array: [Double] =  [0.0, 1.000002, 0.0, 0.0]
array.sort(by: >)
array = array.prefix(1) + array.dropFirst().shuffled()

【讨论】:

  • 如果我有这样的数组? var array: [Double] = [0.0, 1.000002, 1.000003, 0.0] 我该怎么做?
  • @ДмитрийДеникаев 你想要什么结果?如果您使用上面相同的代码,那么结果将是 [1.000003, 0.0, 0.0, 1.000002][1.000003, 0.0, 1.000002, 0.0][1.000003, 1.000002, 0.0, 0.0]
  • 但我想查看结果 [1.000003, 1,000002, 0.0, 0.0]
  • @ДмитрийДеникаев array.sorted(by: >)array.sort(by: >) 可以
  • 但是这段代码'array.dropFirst.shuffled()' 将删除第一个元素,而 1.000002 将与第三个和第四个元素一起洗牌。在最终结果中我会看到 [1.000003, 0.0, 1.000002, 0.0],我错了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-01-15
  • 1970-01-01
  • 2021-07-15
相关资源
最近更新 更多