【发布时间】:2015-04-17 19:30:08
【问题描述】:
我有一个格式如下的交易数组:
“$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 美元之类的东西,它就不能正确排序。
这是我正在使用测试代码的游乐场
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")
}
【问题讨论】:
-
是的,我可以,但是在这一点上,如果比较错误,我如何得到数字并不重要。您认为将其更改为直接比较会解决问题吗?
-
我认为您应该将其存储为 Double 并在显示时将其格式化为货币。
-
我最终做了类似的事情。我的交易不仅包含一美元,还包含一些文本。所以我需要单独存储美元金额。不过谢谢你的建议!
-
顺便说一句,不需要将字符串转换为字符串
标签: ios arrays sorting swift substring