2016-07-21 9 views
0

私はswift 2を使用して、Microsoftの感情APIにアクセスしています。これはそうのような辞書、その後にNSArrayに配置されたJSONオブジェクトを返します。swift 2キー値ペアを値で並べ替えるためのコレクション

`let info : NSArray = (json.valueForKey("scores") as? NSArray)! 

       let anger: Float? = info[0].valueForKey("anger") as? Float 
       let contempt: Float? = info[0].valueForKey("contempt") as? Float 
       let disgust: Float? = info[0].valueForKey("disgust") as? Float 
       let fear: Float? = info[0].valueForKey("fear") as? Float 
       let happiness: Float? = info[0].valueForKey("happiness") as? Float 
       let neutral: Float? = info[0].valueForKey("neutral") as? Float 
       let sadness: Float? = info[0].valueForKey("sadness") as? Float 
       let surprise: Float? = info[0].valueForKey("surprise") as? Float 

       emotions.append(anger!) 
       emotions.append(contempt!) 
       emotions.append(disgust!) 
       emotions.append(fear!) 
       emotions.append(happiness!) 
       emotions.append(neutral!) 
       emotions.append(sadness!) 
       emotions.append(surprise!) 

       let dictionary = [ 
         "anger" : [emotions[0]], 
         "contempt" : [emotions[1]], 
         "disgust" : [emotions[2]], 
         "fear" : [emotions[3]], 
         "happiness" : [emotions[4]], 
         "neutral" : [emotions[5]], 
         "sadness" : [emotions[6]], 
         "surprise" : [emotions[7]] 
        ] 

最大のフロートが感情を決定しますので、私は値がソートを取得する必要があるので、私は何を知っているキーを維持する必要がありますマップされた感情はです。これを行うための最良のコレクションは何か、私はすでに辞書がソートされていないことを知っています。

+0

どのようにデータに後でアクセスする必要がありますか? – Feldur

+0

UILabelに最大値が追加され、ユーザーを表示します –

答えて

0

このコードは、JSON scores配列の最初の辞書を抽出しますが、そこに何もない場合は返します。次に、(1)あなたが興味のある感情キー以外のすべての要素を削除し、(2)残りの感情値をFloatに変換し、(3)最も大きな値の要素のタプルを返します。タプルの2番目の値(感情スコア)を無視します。

let keys = ["anger", "contempt", "disgust", "fear", "happiness", "neutral", "sadness", "surprise"] 

guard let info = (json.valueForKey("scores") as? Array).first else { return } 
let (emotion, _) = info 
    .filter { (k, _) in keys.contains(k) } 
    .map { (k, v) in (k, Float(v)) } 
    .maxElement() 

これで、必要に応じてUI内にemotionの値を使用できるようになりました。

関連する問題