2016-05-16 1 views
1

Прошу прощения, если ответ очень прост. Я новичок в Scala. У меня есть буфер массива карты [String, String]. Полный тип данных ниже.Как отсортировать ArrayBuffer карты на основе ключевого значения карты в scala

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) 
) 

Так хочется разобраться в этом ArrayBuffer на основе ключа «КОП» 's значения. Прямо сейчас это строка, но в сортировке мы можем изменить ее на двойную.

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 РЕПЛ:

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)) 

Надеюсь, что это поможет.

Смежные вопросы