分别对2个连接数组排序;按字母顺序和降序排列(swift3)

时间:2017-09-07 13:25:32

标签: arrays sorting swift3 append guard

现在我的代码按字母顺序打印其字符串数组。我想做的是以[a,1],[a,2],[b,4]的方式组织数组。然后按字母顺序按int降序排列。现在你可以在我的照片中看到下面的代码正在做什么。

var yourArray = [String]()
var number = [Int]()

class ViewController: UIViewController {

    @IBOutlet var labez: UILabel!
    @IBOutlet var textA: UITextField!
    @IBOutlet var textB: UITextField!

    @IBAction func store(_ sender: Any) {
        yourArray.append((textA.text!))
        number.append(Int(textB.text!)!)



        let d = yourArray.enumerated().map { (index,string) -> String in
            guard  number.count > index else { return "" }
            return "\(string )\(" ")\(number[index]) "
        }


        let sortedArray:[String] = d.sorted { $0.localizedCaseInsensitiveCompare($1) == ComparisonResult.orderedAscending }


        labez.text = sortedArray.map { " \($0)" }.joined(separator:"\n")

    }

enter image description here

1 个答案:

答案 0 :(得分:1)

您应该从两个输入数组而不是字符串数组创建一个元组数组。您可以使用zip执行此操作,而使用自定义排序功能可以轻松解决排序问题。如果字符不同,则按字母顺序排序,但如果它们相同,则根据Int值进行排序。

@IBAction func store(_ sender: Any) {
    yourArray.append((textA.text!))
    number.append(Int(textB.text!)!)
    let tuples = zip(yourArray,number)
    let sorted = tuples.sorted(by: { this, next in
        if this.0 < next.0 {
            return true
        } else if this.0 == next.0 {
            return this.1 < next.1
        } else {
            return false
        }
    })
    print(sorted)

    labez.text = sortedArray.map { " \($0)" }.joined(separator:"\n")
}