У меня есть массив сделок формата:Swift - сортировка массива доллара значения
"$ 2,25 Пейте"
"$ 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")
}
Да, я мог бы, но на данном этапе не имеет значения, как я получу номер, если сравнение неверно. Считаете ли вы, что изменить это, чтобы сравнить напрямую, это исправить? – leerob
Я думаю, вы должны сохранить его как Двойной и отформатировать его как валюту при ее отображении. –
В итоге я сделал что-то похожее на это. Моя сделка не содержала всего доллара, она также содержала некоторый текст. Поэтому мне нужно было хранить только сумму в долларах отдельно. Но спасибо за предложение! – leerob