2017-09-07 3 views
0

今、私のコードは文字列配列をアルファベット順に出力します。私がしたいのは、[a、1]、[a、2]、[b、4]のように配列を整理することです。アルファベット順、int降順。今すぐ私の写真の中でコードが何をしているのかを知ることができます。2つの結合された配列を別々にソートします。アルファベット順と降順(swift3)

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

次の2つの入力配列からタプルの配列ではなく文字列の配列を作成する必要があります。 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") 
} 
関連する問題