Простой вопрос по кодированию Scala - PullRequest
1 голос
/ 04 сентября 2011

Предположим, у меня есть список countries типа List[String] и карта capitals типа Map[String, String].Теперь я хотел бы написать функцию

pairs(countries:List[String], capitals:Map[String, String]):Seq[(String, String)]
, которая возвращает последовательность пар (country, capital) и вывести ошибку, если столица для какой-либо страны не найдена.Каков наилучший способ сделать это?

Ответы [ 2 ]

10 голосов
/ 04 сентября 2011

Начнем с того, что Map[String,String] уже уже a Seq[(String,String)], вы можете немного формализовать это, вызвав toSeq, если хотите:

val xs = Map("UK" -> "London", "France" -> "Paris")
xs.toSeq
// yields a Seq[(String, String)]

Таким образом, проблема сводится к поиску стран, которых нет на карте. У вас есть два способа получить коллекцию тех стран, которые представлены .

Метод keys вернет Iterator[String], а keySet вернет Set[String]. Давайте отдадим предпочтение последнему:

val countriesWithCapitals = xs.keySet
val allCountries = List("France", "UK", "Italy")
val countriesWithoutCapitals = allCountries.toSet -- countriesWithCapitals
//yields Set("Italy")

Преобразуйте это в ошибку любым удобным для вас способом.

9 голосов
/ 04 сентября 2011
countries.map(x=>(x, capitals(x)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...