【问题标题】:Sort Array by 2 fields [duplicate]按2个字段对数组进行排序[重复]
【发布时间】:2019-04-19 02:14:46
【问题描述】:

我有一个像这样排序的黑胶唱片:

Touch Me
49ERS
Everything
49ERS
Touch Me
49ERS
How Longer
49ERS

我正在使用此代码:

self.vinyls.sort(by: { (vinyl1, vinyl2) -> Bool in
    return vinyl1.artist < vinyl2.artist
})

但我想这样排序:

Touch Me
49ERS
Touch Me
49ERS
Everything
49ERS
How Longer
49ERS

我该怎么做?

【问题讨论】:

  • 你能澄清一下你希望它如何排序吗?第二个列表不是按字母顺序排列的,所以我不确定在一般情况下您的预期结果是什么。
  • 您目前得到了什么结果?数组中到底有什么?
  • 它们都按艺术家姓名排序,但我希望同一个标题彼此接近,就像我上面写的那样。
  • 什么是vinylartist 是什么属性。它与您的问题有什么关系?你想做什么类型的?
  • @Eduardo 让我看看我是否理解正确:按艺术家排序,如果同一首歌曲有多个实例,则将它们分组到第一个实例旁边,否则保持顺序相同?

标签: arrays swift


【解决方案1】:

您可以在比较中添加更多代码,以检查艺术家是否相等,然后检查曲目。

if vinyl1.artist < vinyl2.artist {
     return true
} else if vinyl1.artist == vinyl2.artist {
     return vinyl1.track < vinyl2.track
} else {
     return false
}

【讨论】:

  • 您可以通过删除第一个条件并将 else 更改为 return vinyl1.artist &lt; vinyl2.artist 来简化此操作。但尚不清楚这是否是 OP 想要的,因为他的列表没有按字母顺序排序。 (也是“乙烯基”,而不是“乙烯基”)
  • 您对条件效率的看法绝对正确,我绝对建议在实践中使用您的代码,但我将保留该部分,以便人们理解逻辑。感谢您看懂拼写,我会改正的。
猜你喜欢
  • 2021-11-14
  • 2020-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-02
相关资源
最近更新 更多