【发布时间】:2013-05-03 05:45:18
【问题描述】:
我有一个元组列表,我想过滤掉元组中第二个值不等于 7 的所有元素。
我愿意:
valuesAsList.filter(x=>x._2 != 7)
我可以使用通配符表示法来缩短它吗?
谢谢。
【问题讨论】:
-
你试过了吗?无论你在哪里看到
x => ... x ...替换为... _ ...
我有一个元组列表,我想过滤掉元组中第二个值不等于 7 的所有元素。
我愿意:
valuesAsList.filter(x=>x._2 != 7)
我可以使用通配符表示法来缩短它吗?
谢谢。
【问题讨论】:
x => ... x ... 替换为 ... _ ...
你可以
valuesAsList.filter(_._2 != 7)
但我怀疑它应该优于您的示例或这个(认为可读性):
valuesAsList.filter {case (_, v) => v != 7}
【讨论】:
filter(_._2 != 7),而不是任何更大的笨拙的东西。我不关心v,只关心_2 != 7;其他一切都会分散注意力。 _. 是最小的干扰。
v 一个名称,这将描述您与 7 比较的内容。
相当直截了当,恕我直言,没有真正的优势:
valuesAsList.filter(_._2 != 7)
【讨论】:
对于元组数组,我们可以使用 for 和 yield 来返回一个数组
scala> val str = Array((2,Hello), (3,MyNameIs), (8,Lolo))
res34: Array[(Int, String)] = Array((2,Hello), (3,MyNameIs), (8,Lolo))
scala> for(i 4)) yield (i._1,i._2.toLowerCase)
res35: Array[(Int, String)] = Array((2,hello), (3,mynameis))
【讨论】: