2017-09-07 10 views
0

바로 지금 내 코드는 문자열 배열을 알파벳순으로 인쇄합니다. 내가하고 싶은 것은 [a, 1], [a, 2], [b, 4]와 같은 방식으로 배열을 구성하는 것입니다. 알파벳순. 그 다음 int 내림차순 바로 지금 내 사진에서 코드가 무엇을하고 있는지 알 수 있습니다.두 개의 조인 된 배열을 개별적으로 정렬합니다. 알파벳 순과 내림차순으로 (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

당신은 두 개의 입력 배열이 아니라 문자열의 배열에서 튜플의 배열을 만들어야합니다. 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") 
}