【发布时间】:2020-04-24 12:14:27
【问题描述】:
我很难理解下面代码中的 m.get 和 m+(x._1 -> x._2) ,谁能告诉我是什么会的
object Solution {
def twoSum(nums: Array[Int], target: Int): Array[Int] = {
nums.zipWithIndex.foldLeft(Map.empty[Int,Int])((m,x)=>
{
if(m.get(target - x._1)==None)
m+(x._1 -> x._2)
else
return Array(m.getOrElse(target-x._1, -1), x._2)
})
null
}
}
此代码返回两个数字的索引,以便它们相加为特定目标。
【问题讨论】:
-
m是Map。m.get(key)从包裹在Option中的Map中检索一个值。如果Map包含指定的键,则结果为Some(value),否则结果为None。m+(k->v)向Map添加一个新的键-> 值对。 (注意:这不是好的/惯用的 Scala 代码。) -
该代码在 Scala 中远不是惯用的。不管怎样,
get,正如documentation 解释的那样,试图从给定键的映射中提取一个值,但是由于键可能不存在,它返回包装在 Option 中的值. -
最后,
m + (x._1, x._2)正在向地图添加一个新的 key-value 对。->创建一个新元组,._1和._2正在访问元组x的元素(所以如果你比编写代码的人有更多的大脑,你会注意到所有这些都是不必要的,因为它与m + x) 完全相同。. -
感谢您的明确解释@Luis Miguel Mejía Suárez 的帮助