2016-07-29 11 views
1

私はSwiftで辞書の配列をソートしようとしています。私は、各辞書の各「Timestamp」の値で配列をソートしようとしているSwiftで文字列の辞書の配列を並べ替える

[ 
    [ 
     "DateTime": "8/16/16, 4:00 PM", 
     "Owner": "Teacher1", 
     "Subject": "AP Euro", 
     "Address": "Mr. Hughes\' Room", 
     "Type": "Final", 
     "Timestamp": "2016081616009498", 
     "Location": "On Campus", 
     "Duration": "50 min", 
     "Members": "ownerKey,1,107434,109431" 
    ], 
    [ 
     "DateTime": "7/29/16, 6:35 AM", 
     "Owner": "109431", 
     "Subject": "Algebra 2 Acc", 
     "Address": "Library", 
     "Type": "Quiz", 
     "Timestamp": "2016072906356642", 
     "Location": "On Campus", 
     "Duration": "5 min", 
     "Members": "ownerKey" 
    ] 
] 

:私の構造は次のようです。これどうやってするの?

私の現在のコード(動作しない)は次のとおりです。

self.todayArray.sortInPlace {item1,item2 in 

    let date1 = Int("\(item1["Timestamp"])") 
    let date2 = Int("\(item2["Timestamp"])") 

    return date1 > date2 
} 
+1

あなたのタイムスタンプは、32ビット整数のためには大きすぎるかもしれません。 'return Double(item1 [" Timestamp "]!)

答えて

4

N/Mの下にあるすべてのもの、それはあなたが辞書順既にあるタイムスタンプフィールドでソートしようとしている、DateTimeフィールドでソートしますソート、これだけを使用します。

foo.sortInPlace { $0["Timestamp"] < $1["Timestamp"] } 

タイムスタンプは、文字列でエンコードされた日付であるので、あなたが最初のより有用なものに変換する必要があります、NSDateFormatterを使用する最も簡単な方法です:

そこあなたが持つ、より適切な何かを行う必要があり、ここで!の多くは、ですが、これはあなたの基本的な考え方を与える:

let foo = [ 
    [ 
     "DateTime": "8/16/16, 4:00 PM", 
     "Owner": "Teacher1", 
     "Subject": "AP Euro", 
     "Address": "Mr. Hughes\' Room", 
     "Type": "Final", 
     "Timestamp": "2016081616009498", 
     "Location": "On Campus", 
     "Duration": "50 min", 
     "Members": "ownerKey,1,107434,109431" 
    ], 
    [ 
     "DateTime": "7/29/16, 6:35 AM", 
     "Owner": "109431", 
     "Subject": "Algebra 2 Acc", 
     "Address": "Library", 
     "Type": "Quiz", 
     "Timestamp": "2016072906356642", 
     "Location": "On Campus", 
     "Duration": "5 min", 
     "Members": "ownerKey" 
    ] 
] 

let formatter = NSDateFormatter() 
formatter.dateFormat = "M/dd/yy, h:mm a" 

let sorted = foo.sort { 
    formatter.dateFromString($0["DateTime"]!)!.compare(formatter.dateFromString($1["DateTime"]!)!) != .OrderedDescending 
} 
print("\(sorted)") 
+0

foo.sort {$ 0 ["Timestamp"] <$ 1 ["Timestamp"]}はfoo.sortInPlace {$ 0 ["Timestamp"] <$ 1 ["Timestamp"]}にする必要がありますか? –

+0

あなたが望むものに依存します。元のコードを模倣するには、はい、sortInPlaceが適切です。私はちょうどそれをほとんどの時間の使用を避けるようにしてください。 –

関連する問題