2017-09-07 1 views
0

Im Moment druckt mein Code sein String-Array in alphabetischer Reihenfolge. Was ich gerne tun würde, ist das Array in einer Art wie [a, 1], [a, 2], [b, 4] zu organisieren. Alphabetische Reihenfolge, dann in absteigender Reihenfolge. Gerade jetzt können Sie in meinem Foto sehen, was der Code unten tut.2 verbundene Arrays getrennt sortieren; in alphabetischer Reihenfolge und in absteigender Reihenfolge (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

Antwort

1

Sie sollten eine Reihe von Tupeln aus den beiden Eingangsarrays anstatt ein Array von Strings erstellen. Sie können dies unter Verwendung von zip tun, als die Verwendung einer benutzerdefinierten Sortierfunktion das Sortierproblem leicht lösen kann. Wenn die Zeichen unterschiedlich sind, sortieren Sie basierend auf ihnen alphabetisch, aber wenn sie identisch sind, sortieren Sie basierend auf dem Int-Wert.

@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") 
} 
Verwandte Themen