2016-08-24 5 views
-1

私は以下のように表示される辞書の配列を持っています。オブジェクトを並べ替えて保存すると、オブジェクトは 'キーのように?私はSwiftでこれをどうやってするのですか?ありがとう。Swift(Xcode 7.3.1)と辞書の値を使用した並べ替え

{ 
    Dislike = 0; 
    Like = 5; 
    userName = T; } 
{ 
    Dislike = 0; 
    Like = 0; 
    userName = S; } 
{ 
    Dislike = 0; 
    Like = 10; 
    userName = N; } 
+0

あなたが示したこのデータ構造が本当にわかりません。それは辞書の配列のように聞こえる。そうですか? – Sweeper

+0

はい、その辞書の配列です。 – NetCod

答えて

0

これは辞書の配列だと思いますか?

それが事実である場合

//AnyObject in case your number is an NSNumber 
var array: [[String:AnyObject?]] = yourArray 

array.sort{ $0["Like"]!! > $1["Like"]!! } 

基本的には、配列を変異させると、ソート「のように」キーに基づいて、以下のように、あなたはそれらを並べ替えることができます。

+0

2つのこと:(1) 'AnyObject'は'> 'で比較できません。 (2) 'sort'は配列を変更せず、' sortInPlace'が行います。 – Sweeper

+0

1)そういうわけで私は二重アンラッピングをしています。 2)あなたが本当に申し訳ありません。私は最近スイフト3で働いていて、忘れてしまった。 Swift 3では配列を突然変異させます。 –

+0

はsortinplaceを使用していました。ありがとう。 – NetCod

0

このデータ構造はあなたが知っていると本当に奇妙に見えます。私はそれが[[String: Any]]だと思う。単にsort機能を使用し、それをソートするには

let data: [[String: Any]] = [ 
    [ 
     "Dislike": 0, 
     "Like": 5, 
     "username": "T"], 

    [ 
     "Dislike": 0, 
     "Like": 0, 
     "username": "S"], 

    [ 
     "Dislike": 0, 
     "Like": 10, 
     "username": "N"], 
] 

:このように宣言する必要があります。クロージャでは、最初のパラメータを2番目のパラメータの前に並べる必要があるかどうかを返す必要があります。この場合、キー"Like"に対応する値のみを比較したいとします。閉鎖体は次のようになります。(擬似コード)

firstParameter["Like"] < secondParameter["Like"] 

私が言ったように、それは擬似コードです。実際のコードはもう少し複雑です:

data.sort { ($0["Like"]! as! Int) < ($1["Like"] as! Int) } 
0

スウィーパーとエディタは正しいです、それは構造体の配列のようです。また、セミコロンを省略することもできます。

struct s { 
    var Dislike: Int = 0 
    var Like: Int = 0 
    var userName: String = "" 
} 

var myArray = [s]() 
var i = s() 

i.Dislike = 0 
i.Like = 5 
i.userName = "T" 
myArray.append(i) 

i.Dislike = 0 
i.Like = 0 
i.userName = "S" 
myArray.append(i) 

i.Dislike = 0 
i.Like = 10 
i.userName = "N" 
myArray.append(i) 

myArray.sort{$0.Like < $1.Like} 
関連する問題