简单的Scala编码问题

时间:2011-09-04 09:56:44

标签: scala

假设我有countries类型的列表List[String]和类型capitals的地图Map[String, String]。现在我想写一个函数

pairs(countries:List[String], capitals:Map[String, String]):Seq[(String, String)]
来返回一对(country, capital)的序列,并在找不到某个国家的资本时打印错误。最好的方法是什么?

2 个答案:

答案 0 :(得分:10)

首先,您的Map[String,String]已经已经 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")

以您认为合适的方式将其转换为错误。

答案 1 :(得分:9)

countries.map(x=>(x, capitals(x)))