前提・実現したいこと
ニフティクラウドから取得したデータを複数あるキーの内,
任意のキーの値で並べ直して配列に入れたいです.
例えば,
swift
1[{ 2 "Name" : "田中", 3 "getFlag" : true, 4 "updateDate" : { 5 "__type" : "Date", 6 "iso" : "2020-04-16T06:46:12.137Z" 7 }, 8 "acl" : { 9 "*" : { 10 "write" : true, 11 "read" : true 12 } 13 }, 14 "HP" : 2, 15 "MP" : 2, 16 "objectId" : "*********", 17 "Num" : 1, 18 "createDate" : { 19 "__type" : "Date", 20 "iso" : "2020-04-16T06:26:34.292Z" 21 } 22}, 23{ 24 "Name" : "佐藤", 25 "getFlag" : true, 26 "updateDate" : { 27 "__type" : "Date", 28 "iso" : "2020-04-16T06:46:12.137Z" 29 }, 30 "acl" : { 31 "*" : { 32 "write" : true, 33 "read" : true 34 } 35 }, 36 "HP" : 8, 37 "MP" : 90, 38 "objectId" : "*********", 39 "Num" : 2, 40 "createDate" : { 41 "__type" : "Date", 42 "iso" : "2020-04-16T06:26:34.292Z" 43 } 44}//以下たくさん(Numは順不同)
のデータを取得できたとします.
これをNum順に並べ直したいとき,
どのようなコードを書けばいいのでしょうか.
試したこと
配列や辞書での検索やソート関係を探して試しましたが
どれもうまくいかず仕舞いでした.
そのデータをどういう型で受け取ってるかにもよりますが、var data: [[String: Any]] なら
data.sort { ($0["Num"] as! Int) < ($1["Num"] as! Int) }
でしょうか。
回答ありがとうございます.
データの受け取り方を書いておりませんでしたね,すみませんでした.
データは,data:[NCMBObject] で受け取っています.
回答していただいた方法ですと,
「 Value of type 'NCMBObject' has no subscripts 」
というエラーが出てきます...
調べてみたところ,辞書型に一回キャストすれば良さげでした.
そこで
deta.value as! [String: Any]
(そもそも,この書き方で合っているのかもわからない)
をしてみたところ,
「 Value of type '[NCMBObject]' has no member 'value' 」
というエラーが出てきました.
キャスト方法が違うのでしょうか・・・?
NCMBObject は使ったことないので良く分かりませんが、
https://github.com/NIFCLOUD-mbaas/UserCommunity/issues/949
によれば object(forKey:) で値を取得するようですね。
ってことはたぶん、var data: [NCMBObject] に対して、
data.sort { ($0.object(forKey: "Num") as! Int) < ($1.object(forKey: "Num") as! Int) }
で行けるかも?
参考
https://mbaas.nifcloud.com/assets/sdk_doc/ios_2.4.3/doc/html/Classes/NCMBObject.html
https://qiita.com/naokits/items/db6dfd0eddcf5a38f1dc
回答有難うございます!!
その書き方でソートすることができました!!
考え方を見てスッキリしました.
参考も丁寧にリンクを貼ってくださり
本当にありがとうございます.
最後に気づいたのですが,ここは追記フォームでした...
そのため,hoshi-takanori様に評価をつけることができません.
回答フォームにコピペでいいので先程の回答を記入してもらえないでしょうか?
3日経っても記入されない場合,勝手ですが自己解決の方に記入させていただきます.
気づくのが遅くなって申し訳ありません...
回答1件
あなたの回答
tips
プレビュー