【发布时间】:2018-11-22 01:02:46
【问题描述】:
如果我有一个可选字符串数组,并且我想以 nils 开头的升序对其进行排序,我可以在一行中轻松完成:
["b", nil, "a"].sorted{ $0 ?? "" < $1 ?? "" } // [nil, "a", "b"]
但似乎没有任何类似简单的解决方案可以将 nil 排序到数组的 end。大多数其他简单数据类型都可以轻松完成,例如:
[2, nil, 1].sorted{ $0 ?? Int.max < $1 ?? Int.max } // [1, 2, nil]
对于双打,您可以使用greatestFiniteMagnitude 执行相同的操作,对于日期,您可以使用distantFuture。是否有任何等效的字符串,或任何其他简洁的方式来避免编写一堆混乱的条件?
【问题讨论】:
-
使用
"\u{ffff}"代替"" -
@holex:如果字符串是“????”又名
"\u{1f600}"?这与"\u{ffff}"相比如何?它可能会偶然起作用,但我不建议使用“魔法值”。 -
@MartinR,这个想法在这里展示了潜在的 high-end unicode 值,而不是 exact 值 - 但同意有更优雅的解决方案(例如你的)但大多数开发人员无法理解这一点。
标签: arrays swift sorting optional