2017-09-02 16 views
0

私は自分の構造体をアルファベット順に出力し、次にデータを降順で並べ替えるようにしたいと思います。だから、最終的な結果は次のようになります。「ルークス9」、「ルークス4」、「鍛冶4」構造体のアルファベット順と降順で配列をプリント

struct MyData { 
    var company = String() 
    var score: Int 
} 

let data = [ 
    MyData(company: "smiths", score: 4), 
    MyData(company: "lukes", score: 4), 
    MyData(company: "lukes", score: 9) 
] 
+0

MyDataを「Comparable」に準拠させる必要があります –

答えて

3

は、あなたがこれを行うことができます2つの方法があります。両方ともsort(Swift 2)に配列を渡す必要があります。現在はsorted(Swift 3)です。

  1. 非常に簡単な実装:

    struct MyData { 
        var company = String() 
        var score: Int 
    } 
    
    let data = [ 
        MyData(company: "smiths", score: 4), 
        MyData(company: "lukes", score: 4), 
        MyData(company: "lukes", score: 9) 
    ] 
    
    let sortedArray = data.sorted(by: { ($0.company, $1.score) < ($1.company, $0.score) }) 
    
  2. またMyDataComparableに準拠して作ることができます。これは、のMyDataタイプ内の比較ロジックを保持し、あなただけの新しい配列を返すためにsorted()機能を実行することができます:

    struct MyData { 
        var company = String() 
        var score: Int 
    } 
    
    extension MyData: Equatable { 
        static func ==(lhs: MyData, rhs: MyData) -> Bool { 
         return (lhs.company, lhs.score) == (rhs.company, rhs.score) 
        } 
    } 
    
    extension MyData: Comparable { 
        static func <(lhs: MyData, rhs: MyData) -> Bool { 
         return (rhs.company, lhs.score) > (lhs.company, rhs.score) 
        } 
    } 
    
    let data = [ 
        MyData(company: "smiths", score: 4), 
        MyData(company: "lukes", score: 4), 
        MyData(company: "lukes", score: 9) 
    ] 
    
    let sortedArray = data.sorted() 
    

これらの2つの実装の両方の出力あなたの希望する結果:「ルークス9」、「ルークスを4 "、" smiths 4 "

+0

等価性と比較のための静的メソッドの詳細については、[Appleのドキュメント](https://github.com/apple/)を参照してください。 swift-evolution/blob/9cf2685293108ea3efcbebb7ee6a8618b83d4a90/proposals/0091-improving-operators-in-protocols.md) –

関連する問題