2016-05-16 2 views
1

答えが非常に単純であれば申し訳ありません。私はScalaの新機能です。 Map [String、String]の配列バッファを持っています。 以下の完全なデータ型。スカラのマップのキー値に基づいてMapのArrayBufferを並べ替える方法

mutable.ArrayBuffer[mutable.Map[String, String]]() 

マップのキー値に基づいてこの配列バッファを並べ替える必要があります。マイ配列バッファがどのように見える

ArrayBuffer(
    Map(youtube -> , script -> , domain -> EverydayMeArabia.com, cpc -> 0.02, is_mobile -> 0, video_width -> 0, article_id -> 423, url -> http://www.everydaymearabia.com/, mobile_device -> Desktop,Android,iPhone, number_of_article -> 1, user_rate -> null, lang -> en, campaign_id -> 45, twitter -> , name -> كيفيّة تحضير بيتزا بريمافيرا الإيطالية الأصيلة, logo -> , video -> 0, play_video -> 0, rate -> null, facebook -> , image -> ------1-size-3jpg.JPG, video_height -> 0, premium -> 0, params -> null), 
    Map(youtube -> https://www.youtube.com/user/everydaymearabia, script -> , domain -> EverydayMeArabia.com, cpc -> 0.02, is_mobile -> 0, video_width -> 0, article_id -> 422, url -> http://www.everydaymearabia.com/حياة-الأسرة/نصائح-للأسرة/مقالة/كيف-تتفوقين-في-مقابلة-عمل, mobile_device -> Desktop,Android,iPhone, number_of_article -> 1, user_rate -> null, lang -> en, campaign_id -> 45, twitter -> , name -> كيف تتفوقين في مقابلة عمل؟, logo -> logoeverydaymepng.png, video -> 0, play_video -> 0, rate -> null, facebook -> , image -> -----1-size-3jpg.JPG, video_height -> 0, premium -> 0, params -> null), 
    Map(youtube -> , script -> , domain -> alaan.tv, cpc -> 0.01, is_mobile -> 0, video_width -> 0, article_id -> 488, url -> http://www.alaan.tv/news/technology/130964/15-most-important-job-technology-pay, mobile_device -> Desktop,Android,iPhone, number_of_article -> 2, user_rate -> null, lang -> en, campaign_id -> 48, twitter -> , name -> 15 وظيفة تجعل من أصحابها مليونيرات في عام واحد!, logo -> , video -> 0, play_video -> 0, rate -> null, facebook -> , image -> 15jobsjpg.jpg, video_height -> 0, premium -> 0, params -> null), 
    Map(youtube -> , script -> , domain -> alaan.tv, cpc -> 0.01, is_mobile -> 0, video_width -> 0, article_id -> 487, url -> http://www.alaan.tv/news/entertainment/130459/facts-reveals-serious-life-line-discovered, mobile_device -> Desktop,Android,iPhone, number_of_article -> 2, user_rate -> null, lang -> en, campaign_id -> 48, twitter -> , name -> حقائق خطيرة يكشفها خط الحياة عنكم .. اكتشفوها, logo -> , video -> 0, play_video -> 0, rate -> null, facebook -> , image -> handlinesjpg.jpg, video_height -> 0, premium -> 0, params -> null), 
    Map(youtube -> null, script -> , domain -> alaan.tv, cpc -> 0.01, is_mobile -> 0, video_width -> 0, article_id -> 483, url -> http://www.alaan.tv/womens-world/entertainment/128348/countries-worlds-most-beautiful-women, mobile_device -> Desktop,Android,iPhone, number_of_article -> 2, user_rate -> null, lang -> en, campaign_id -> 48, twitter -> null, name -> أجمل فتيات العالم في هذه البلاد, logo -> , video -> 0, play_video -> 0, rate -> null, facebook -> null, image -> beautiful-womenjpg.jpg, video_height -> 0, premium -> 0, params -> null) 
) 

だからキー「CPC」の値に基づいて、このarraybufferをソートしたいです。今はストリングですが、ソートではダブルに変更することができます。

cpc -> 0.01 <<<- sort by this value of each map. 

ソートされた同じまたは新しい配列バッファを返します。

+3

myArrayBuffer.sortBy(m => m.get( "cpc")) ' – Mifeet

+0

Scalaについての素晴らしい点は、メソッドの豊富な選択です。次回は、(1)自動補完機能付きのIDEを使用する場合、(2)変数を定義する場合など、ソリューションを自分で見つけることができます。 'val x:ArrayBuffer [...] = ...'(3) 'x.sort'とタイプし、提案されたメソッドでjavadocを読んでください。 – Mifeet

答えて

1

Mifeetは、前述のように:

myArrayBuffer.sortBy(m => m.get("cpc") 

はあなたのために働く必要があります。

このページでは、どのように動作するかを示すデモンストレーションがあります。 Examples of methods available to Scala sequences

は、この例があるでしょう:

case class Person(firstName: String, lastName: String) 

val fred = Person("Fred", "Flintstone") 
val wilma = Person("Wilma", "Flintstone") 
val barney = Person("Barney", "Rubble") 
val betty = Person("Betty", "Rubble") 

val people = List(betty, wilma, barney, fred) 

データは、ここでSORTBY例だと考える:

people.sortBy(n => (n.lastName, n.firstName)) 

は、ここで例のカップルはScalaのREPLでどのように見えるかです:

scala> people.sortBy(n => (n.lastName, n.firstName)) 
res1: List[Person] = List(Person(Fred,Flintstone), Person(Wilma,Flintstone), Person(Barney,Rubble), Person(Betty,Rubble)) 

scala> people.sortBy(n => (n.firstName, n.lastName)) 
res2: List[Person] = List(Person(Barney,Rubble), Person(Betty,Rubble), Person(Fred,Flintstone), Person(Wilma,Flintstone)) 

希望します。

関連する問題