2017-11-28 16 views
0

曜日の名前で並べ替えたい。ルート配列の最初のインデックスと同様に、日曜日、月曜日、火曜日などがあります。曜日名で辞書の配列を並べ替えるswift3

[{ 

    day = Monday; 
    timingValues =  (
       { 
      closeHour = 23; 
      closeMin = 55; 
      day = Monday; 
      id = 2; 
      openHour = 00; 
      openMin = 00; 
     } 
    ); 
}, 

{ 

day = Tuesday; 

    timingValues =  (

       { 
      closeHour = 00; 
      closeMin = 11; 
      day = Tuesday; 
      id = 4; 
      openHour = 12; 
      openMin = 10; 
     } 
    ); 
}, { 

    day = Sunday; 
    timingValues = (
       { 
      closeHour = 23; 
      closeMin = 07; 
      day = Sunday; 
      id = 5; 
      openHour = 11; 
      openMin = 07; 
     } 

); 

}] 

答えて

0

まず、あなたの質問の辞書の形式は、そのためのSwiftの構文と一致しません。私はあなたがそれを知っていると推測し、あなたはこの構造を持つ適切なスウィフト辞書を持っています。 this referenceを参照してください。

次に、あなたは(その週はここに日曜日から始まる注意してください)このような平日のためのカスタムタイプを定義する必要があります。

enum Weekday: Int { 
    case Sunday = 0, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday 
} 

は、あなたがその日の値のキーとしてこのタイプを使用して辞書を作成していることを確認します。

はあなたがソートされたこのような配列得ることができる必要があり、すべてが適切に設定されていることを考える:力アンラップの

let sortedArray = initialArray.sorted { (element0, element1) -> Bool in 
    guard let day0 = element0["day"] as? Weekday, let day1 = element1["day"] as? Weekday else { 
     // Default behaviour in case you used wrong Weekday type or didn't set it at all 
     return false 
    } 

    return day0 < day1 
} 
+0

を確認してください。!返信いただきありがとうございます。 –

1

たくさんいますが、比較のアイデアを得ることができ、また、確認する必要があります文字列が正しいです、私はちょうど参照として1行を行っている、それは実際のコードでは、オプションのチェックを行う必要があります安全ではないです。

let dictArray = [["day": "Monday", "timingValues" : 1], 
        ["day" : "Tuesday", "timingValues" : 2], 
        ["day" : "Saturday", "timingValues" : 3], 
        ["day" : "Sunday", "timingValues" : 4]] 
let b = dictArray.sorted(by: { DateFormatter().weekdaySymbols.index(of: ($0["day"]! as! String))! < DateFormatter().weekdaySymbols.index(of: ($1["day"]! as! String))! }) 

結果:

[["day": "Sunday", "timingValues": 4], ["day": "Monday", "timingValues": 1], ["day": "Tuesday", "timingValues": 2], ["day": "Saturday", "timingValues": 3]] 
+0

素晴らしい!それは働いている。あなたは私の時間を救った。ありがとうございました。 –

+0

@ShashiDev別の答えよりも好きな答えを強制する必要はありませんが、オプションのキャストと組み合わせた 'Weekday'タイプのアイデアを使用することを検討してください('? 'ではなく'! ')。それはずっと安全で、将来的にそれをサポートするのに問題は少なくなります。 – nshuman

関連する問題