0
我有一个2D阵列如下:滤波器使用多个元件阵列和逻辑运算符
scala> testme4
res15: Array[(java.sql.Timestamp, Int, Int, Boolean)]
= Array((2016-11-17 15:18:50.47,13,-8,false),
(2016-11-17 15:18:51.37,21,-1,false),
(2016-11-17 15:18:51.37,22,-1,false),
(2016-11-17 15:18:51.86,23,-1,false),
(2016-11-17 15:18:52.3,24,22,false),
(2016-11-17 15:18:52.37,2,-2,false),
(2016-11-17 15:18:54.2,4,-1,false),
(2016-11-17 15:18:54.2,5,-7,false),
(2016-11-17 15:20:57.27,12,-4,false),
(2016-11-17 15:20:57.67,16,-1,false),
(2016-11-17 15:20:57.67,17,-9,false),
(2016-11-17 15:20:58.3,26,0,false),
(2016-11-17 15:20:59.35,26,0,true)
)
我想选择(过滤器),以获得其它所有元素,然后“2016年11月17日15:20: 58.3,26,0,假”
我需要filtereing上(伪代码)做到这一点使用的每个元素...的第三和第四子元素:
_3 = 0或1-4 = = true
这两个谓词正常工作对自己的过滤器:
scala> testme4.filter(_._3 != 0)
res16: Array[(java.sql.Timestamp, Int, Int, Boolean)]
= Array((2016-11-17 15:18:50.47,13,-8,false),
(2016-11-17 15:18:51.37,21,-1,false),
(2016-11-17 15:18:51.37,22,-1,false),
(2016-11-17 15:18:51.86,23,-1,false),
(2016-11-17 15:18:52.3,24,22,false),
(2016-11-17 15:18:52.37,2,-2,false),
(2016-11-17 15:18:54.2,4,-1,false),
(2016-11-17 15:18:54.2,5,-7,false),
(2016-11-17 15:20:57.27,12,-4,false),
(2016-11-17 15:20:57.67,16,-1,false),
(2016-11-17 15:20:57.67,17,-9,false)
)
或..
scala> testme4.filter(_._4)
res17: Array[(java.sql.Timestamp, Int, Int, Boolean)]
= Array((2016-11-17 15:20:59.35,26,0,true))
但如果我尝试将它们与逻辑运算符结合我得到一个错误:
scala> testme4.filter(_._3 != 0 || _._4)
<console>:38: error: missing parameter type for expanded function ((x$1, x$2) => x$1._3.$bang$eq(0).$bar$bar(x$2._4))
testme4.filter(_._3 != 0 || _._4)
没有人有任何想法为什么会出现这种错误?以及如何使用过滤器实现简单的逻辑操作?
提前非常感谢
修复是正确的,但我仍然略有不同意的解释。每个函数参数必须使用'_'一次,并且只需使用一次。因此,写'_._ 3!= 0 || _._ 4',编译器将创建一个期望两个参数的函数。它与'i => i._3!= 0 ||非常不同i._4'这显然是一个只需要一个参数的函数。 –
Hi @FredericA。,正如你所说的:“必须为每个函数参数使用一次和一次。”所以'_'应当用作**最小**上下文,当使用'_._ 3!= 0 ||时在这种情况下,这会造成编译器的混乱。 – chengpohi
非常感谢您的帮助和解释:-) –