说我有两个清单
val L1 = List[(Int, Int)]((1,1), (2,2))
val L2 = List[(Int, Int, Int)]((1,1,1), (2,2,2))
Run Code Online (Sandbox Code Playgroud)
现在我想创建一个函数func,它接受一个Int值i以及第一个元素匹配的两个列表中的所有项i.一种方法是
def func(i:Int) = {
L1.collect.collect{case any if any._1 != i => any}
L2.collect.collect{case any if any._1 != i => any}
}
Run Code Online (Sandbox Code Playgroud)
考虑到两条线是如此相似,如果可以缩短代码将是很好的.我正在以某种方式瘦我可以传递L1(和L2)作为参数func.该函数不应该预先知道元组将具有多少元素,只是第一个元素是Int.
这可能吗?
[编辑:我认为问题不够明确.我很抱歉.]
这就是我想要做的.我想在两个以上的列表上做这个,比如n,通过func多次调用,每个列表一次.
L1 = L1.collect.collect{case any if any._1 != i => any}
L2 = L2.collect.collect{case any if any._1 != i => any}
...
Ln = Ln.collect.collect{case any if any._1 != i => any}
Run Code Online (Sandbox Code Playgroud)
其中每个L1,, L2... Ln是具有第一个元素的元组列表Int
[EDIT2]
在上面,L1可以列出(Int, String),L2可以是(Int, Int, Int)等等.唯一的保证是第一个元素是Int.
def func(i:Int, lst: List[Product]) = {
lst.filter(_.productElement(0) == i)
}
Run Code Online (Sandbox Code Playgroud)
根据你的编辑和丹的评论编辑.