我有这样的字典
["Price": ["$00.00 - $200.00","$200.00 - $400.00","$600.00 - $800.00"]]
现在我将所有字典值存储在这样的数组中
var priceRange: [String] = [String]() if let obj = currentFilters["Price"] as? [String] { self.priceRange = obj printD(self.priceRange) }
通过使用Array.first和Array.last方法,我将获得第一个元素的值和我的数组的最后一个元素.
let first = priceRange.first ?? "" // will get("[$00.00 - $200.00]") let last = priceRange.last ?? "" // will get("[$600.00 - $800.00]")
但我真正想要的是我想先从$00.00和最后$800来制作所需的[$00.00 – $800.00]组合.
我怎样才能做到这一点.请帮忙?
解决方法
您需要取第一个值(“$00.00 – $200.00”),然后取最后一个值(“$600.00 – $800.00”),然后用“ – ”符号拆分它们,分别取第一个和最后一个值并将它组合成单个字符串.
let currentFilters = ["Price": ["$00.00 - $200.00","$600.00 - $800.00"]] var priceRange: [String] = [String]() if let obj = currentFilters["Price"] as? [String] { priceRange = obj print(priceRange) } let first = priceRange.first!.split(separator: "-").first! let last = priceRange.last!.split(separator: "-").last! let range = "\(first) - \(last)"
为了更好的选项处理你可以使用它(注意,我正在遵循我的描述性编码风格.这段代码可以更加紧凑)
func totalRange(filters: [String]?) -> String? { guard let filters = filters else { return nil } guard filters.isEmpty == false else { return nil } guard let startComponents = priceRange.first?.split(separator: "-"),startComponents.count == 2 else { fatalError("Unexpected Filter format for first filter") // or `return nil` } guard let endComponents = priceRange.last?.split(separator: "-"),endComponents.count == 2 else { fatalError("Unexpected Filter format for last filter") // or `return nil` } return "\(startComponents.first!) - \(endComponents.last!)" } let range = totalRange(filters: currentFilters["Price"]) let range1 = totalRange(filters: currentFilters["Not Exists"])
过去上面的代码到操场.它可以用更短的方式编写,但为了描述,我保持这样