【问题标题】:Sorting numbers after letters in alphabetical order [duplicate]按字母顺序对字母后的数字进行排序[重复]
【发布时间】:2018-03-02 22:13:31
【问题描述】:

我有一个字符串数组。这些字符串以字母和数字开头。通过使用 sorted 函数,我可以对数字进行排序,然后按字母顺序对字符串进行排序。

let tricks = [ "360", "540", "720", "Blunt", "Nose Grind", "Method Air", "360 Mute Grab", "Japan Air"]
let sortedTricks = tricks.sorted { $0.lowercased() < $1.lowercased() }
print(sortedTricks)
// ["360", "360 Mute Grab", "540", "720", "Blunt", "Japan Air", "Method Air", "Nose Grind"]

如何先对字母进行升序排序,然后再对数字进行升序排序?最终,这就是我希望上面的打印方式:

// ["Blunt", "Japan Air", "Method Air", "Nose Grind", "360", "360 Mute Grab", "540", "720"]

【问题讨论】:

  • 不以字母 A-Z 或数字 0-9 开头的字符串怎么办?
  • @rmaddy - 所有字符串都应该以 0-9、A-Z 开头,但是,任何其他字符(如果它们最终出现在数据中)应该被推到最后。这里的真正目标是首先显示 A-Z,然后在排序后的字母之后显示其他任何内容(数字、字符等)。
  • 您想要的输出中的字母“降序排序”在什么意义上?在我看来,Blunt 和 Nose Grind 等都与原始输入中的顺序相同。数字似乎是上升的,而不是下降的。您声称的所需输出与您的描述完全不符。
  • @Matt,很抱歉!我在编辑操场的时候发帖,所以我粘贴了两个不同的结果。我也不小心写了降序而不是升序。原始帖子已被编辑。
  • 那么在下面的回答中说nonnumbers.sorted() 而不是nonnumbers。但即便如此,也不清楚你真正追求的是什么。数字的排序对我来说似乎是任意的。

标签: arrays swift string sorting


【解决方案1】:

不清楚您想要什么,因为您的口头描述与您显示的输出不匹配。从给定的输入很容易实现显示的输出:

let tricks = [ "360", "540", "720", "Blunt", "Nose Grind", "Method Air", "360 Mute Grab", "Japan Air"]
func startsWithANumber(_ s:String) -> Bool {
    return "0123456789".contains(s.first!)
}
let nonnumbers = tricks.filter {!startsWithANumber($0)}
let numbers = tricks.filter {startsWithANumber($0)}
let result = nonnumbers + numbers.sorted()
// ["Blunt", "Nose Grind", "Method Air", "Japan Air", "360", "360 Mute Grab", "540", "720"]

但是这是否正确地涵盖了所有可能的输入集是不可能的,因为你没有清楚或严谨地描述你想要的输出。

【讨论】:

  • 谢谢,马特!这非常有效!数据只能以 0-9 或 A-Z 开头,因此涵盖所有碱基。
猜你喜欢
  • 1970-01-01
  • 2018-01-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-02
  • 2013-11-02
相关资源
最近更新 更多