2017-07-30 19 views
0

にサブ構造体と構造体の並べ替え私は私のプロジェクトでは、以下の構造体を持っています。スウィフト

私はこれを行う方法に完全に固執しています。

すべてのポインタを入力してください。 (私はあなたが教えられなかったら、Structsを学び始めたばかりです!)

ありがとう!

UPDATE:すべての構造体名の

{ 
    templateScheduleTypes =  (
       { 
      templateScheduleNames =    (
           { 
        templateNameId = "fad562bc-4510-49ea-b841-37a825a2f835"; 
        templateSchedName = "Daily_Intensive"; 
       }, 
           { 
        templateNameId = "fdeeb79f-6321-4ff6-b1f0-8272a018e73b"; 
        templateSchedName = "Weekly_Full_Log_Directories"; 
       }, 
           { 
        templateNameId = "84f9800f-da18-44b8-822f-830069dcc594"; 
        templateSchedName = "Weekly_Full"; 
       }, 
           { 
        templateNameId = "47a6f050-13d7-4bf6-b5db-ab53e0a3aa54"; 
        templateSchedName = "Weekly_Full_Catalog_Two_Weeks"; 
       }, 
           { 
        templateNameId = "b8ef9577-e871-4d79-8d3a-cfe958c0c3aa"; 
        templateSchedName = "Weekly_Full_Over_WAN"; 
       }, 
           { 
        templateNameId = "8d507f52-0d74-404e-ad0d-76e6a7a94287"; 
        templateSchedName = "Monthly_Full"; 
       } 
      ); 
      templateTypeId = "4e73b9ea-71d0-4abd-83c6-7d7b6d45641b"; 
      templateTypeName = datalist; 
     }, 
       { 
      templateScheduleNames =    (
           { 
        templateNameId = "39386552-45a5-4470-b152-7be00583e767"; 
        templateSchedName = "Scheduled_Exchange_Server"; 
       } 
      ); 
      templateTypeId = "a7c28240-c187-4f86-818c-efd86fb26c7d"; 
      templateTypeName = MSESE; 
     }, 
       { 
      templateScheduleNames =    (
           { 
        templateNameId = "0037846c-d1fe-4c8f-8eec-c62681a12a57"; 
        templateSchedName = "Scheduled_Exchange_Single_Mailbox"; 
       } 
      ); 
      templateTypeId = "9e06f06a-11dc-44b8-97a0-68bd0b45a07a"; 
      templateTypeName = Mailbox; 
     } 
    ); 
} 

答えて

1

まず大文字の文字で始まる必要があります。ここには私のJSONデータがあります。

あなたの質問に答えるために、あなたはTemplateScheduleName

struct TemplateScheduleName: Decodable { 
    let templateNameId: String? 
    let templateSchedName: String 
} 

は、あなたが簡単にそれ

並べ替えることができます今

let list : [TemplateScheduleName] = [] 

与えComparable

extension TemplateScheduleName: Comparable { 

    static func ==(lhs: TemplateScheduleName, rhs: TemplateScheduleName) -> Bool { 
     return lhs.templateSchedName == rhs.templateSchedName 
    } 

    public static func <(lhs: TemplateScheduleName, rhs: TemplateScheduleName) -> Bool { 
     return lhs.templateSchedName < rhs.templateSchedName 
    } 
} 

に適合させる必要があります

let sortedList = list.sorted() 
+0

ありがとうございますが、TemplateScheduleResponse(トップ構造体)のリストがある場合は、スケジュール名の中でどのようにソートするのですか? – FlatDog

+0

私はそれに準拠しません。とにかく閉鎖を取ることができるだけで、このソート基準が均等性を定義できると推論する理由はありません – Connor

2

Comparableに準拠しなくても、アドホックソートを行うことができます。 xがタイプtemplateScheduleTypeのいくつかの変数がある場合:

init(scheduleNames: [templateScheduleName], typeID:String?, typeName:String) { 
    self.templateScheduleNames = scheduleNames.sorted(by: { (lhs, rhs) -> Bool in 
     return lhs.templateSchedName < rhs.templateSchedName 
    }) 
    self.templateTypeId = typeID 
    self.templateTypeName = typeName 
} 
:あなたは、配列は、建設時に所定の位置にソートされていることを確認したい場合は

x.templateScheduleNames.sorted(by: { (lhs, rhs) -> Bool in 
    return lhs.templateSchedName < rhs.templateSchedName 
}) 

、ちょうどあなたがクラスの場合と同じようscheduleTemplateType上のinitメソッドを定義します

+0

ああ!ありがとう。これはinitメソッドでより有望です。しかし、並べ替え順はまだ正しいとは思われませんが、次のようになります:http://imgur.com/a/WJrN7 – FlatDog