我有一系列格式如下的交易:
“$2.25 饮料 A”
“5 美元饮料 B”
“10 美元饮料 C”
等等
我想按金额对它们进行排序。
deals.sort {
var first = $0.deal as String
var second = $1.deal as String
var myArr1 = first.componentsSeparatedByString(" ")
var myArr2 = second.componentsSeparatedByString(" ")
var formatter = NSNumberFormatter()
formatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle
if let price1 = formatter.numberFromString(myArr1[0]) as NSNumber! {
if let price2 = formatter.numberFromString(myArr2[0]) as NSNumber!{
return first < second
}
}
return false
}
这对于 4.25 美元和任何一位数字的值都可以正常工作。如果我尝试 10.25 美元之类的东西,它不会正确排序。
这是我用来测试代码的 playground
import UIKit
var deals: [(deal:String, bar:String)] = []
deals.append(deal: "$0.95" as String, bar: "bar" as String)
deals.append(deal: "$2.95" as String, bar: "bar" as String)
deals.append(deal: "$11.95" as String, bar: "bar" as String)
deals.append(deal: "$3.95" as String, bar: "bar" as String)
deals.sort {
var first = $0.deal as String
var second = $1.deal as String
var myArr1 = first.componentsSeparatedByString(" ")
var myArr2 = second.componentsSeparatedByString(" ")
var formatter = NSNumberFormatter()
formatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle
if let price1 = formatter.numberFromString(myArr1[0]) as NSNumber! {
if let price2 = formatter.numberFromString(myArr2[0]) as NSNumber!{
return first < second
}
}
return false
}
for deal in deals{
print("\(deal.deal)\n")
}
最佳答案
编辑:我知道你已经接受了一个答案,但是 FWIW,根据你自己的问题编辑,我在下面更新了我的答案,向你展示你的 Playground 代码是如何改变的让我最初的建议奏效。
deals.sort{
let myArr1 = $0.deal.componentsSeparatedByString(" ")
let myArr2 = $1.deal.componentsSeparatedByString(" ")
let formatter = NSNumberFormatter()
formatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle
if let price1 = formatter.numberFromString(myArr1[0]) {
if let price2 = formatter.numberFromString(myArr2[0]) {
return price1.floatValue < price2.floatValue
}
}
return false
}
另一个建议是,如果您有一个 Deal
类,并且具有返回交易的浮点值的特定属性,您可以做得更简单,如下所示:
var dealValue: Float {
get {
let myArr = self.deal.componentsSeparatedByString(" ")
let formatter = NSNumberFormatter()
formatter.numberStyle = NSNumberFormatterStyle.CurrencyStyle
if let price = formatter.numberFromString(myArr[0]) {
return price.floatValue
} else {
return 0
}
}
}
那么您之前的代码将简单地变成:
deals.sort { $0.dealValue < $1.dealValue }
关于ios - Swift - 对美元值数组进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28555804/