Scala中使用Filter实现同索引列表元素匹配的函数编写求助
实现Scala的matchedNumbers函数
没问题,我来帮你搞定这个需求!要实现这个函数,核心思路是先把两个列表的元素按索引位置配对,再筛选出配对后两个值相等的元素,最后提取出这些值即可。
完整实现代码
def matchedNumbers(list1: List[Int], list2: List[Int]): List[Int] = { // 1. 将两个列表按索引配对,得到元组列表 list1.zip(list2) // 2. 筛选出元组中两个元素相等的项 .filter { case (num1, num2) => num1 == num2 } // 3. 提取出配对成功的元素(取元组任意一个都可以,因为两者相等) .map(_._1) }
验证示例
按照你给出的测试用例运行:
val list1 = List(1,2,3,10) val list2 = List(3,2,1,10) val mn = matchedNumbers(list1, list2) // mn 的结果就是 List(2, 10),完全符合预期
额外说明
- 这里用
zip方法来配对元素,它会以较短的列表长度为准,如果两个列表长度不一致,超出部分的元素会被忽略。比如如果list1是List(1,2,3),list2是List(1,2),那么只会配对前两个元素。 - 如果你需要处理两个列表长度不同的场景(比如对超出部分做默认值处理),可以改用
zipAll方法,比如list1.zipAll(list2, 0, 0)(这里0是默认值,可根据需求调整),再后续处理。
内容的提问来源于stack exchange,提问作者Biomechanic
相关产品推荐
相关产品推荐

