我有一个字符清单是斯卡拉我想删除所有不是括号的字符。问题是,我似乎只是能够为一个字符做到这一点,如:斯卡拉 - 如何筛选两个字符的列表
var parens = chars.filter(_ == '(')
如果我试试这个:
var parens = chars.filter(_ == '(').filter(_ == ')')
..我什么也没得到,因为我一次过滤,然后第二次消除了一切。如何过滤多个字符的字符列表(不是字符串列表)?
我有一个字符清单是斯卡拉我想删除所有不是括号的字符。问题是,我似乎只是能够为一个字符做到这一点,如:斯卡拉 - 如何筛选两个字符的列表
var parens = chars.filter(_ == '(')
如果我试试这个:
var parens = chars.filter(_ == '(').filter(_ == ')')
..我什么也没得到,因为我一次过滤,然后第二次消除了一切。如何过滤多个字符的字符列表(不是字符串列表)?
如果您需要/想一个实用的解决方案,然后尝试这个办法:
val givenList = List('(', '[', ']', '}', ')')
val acceptedChars = List('(', ')')
givenList filter acceptedChars.contains // or givenList.filter(acceptedChars.contains)
现在你可以添加任何字符,你喜欢上你想过滤列表给出不改变过滤器调用列表秒。如果您想离开不在acceptedList
中的字符,请更改为filterNot
。这个形式给出的另一个优点是,你不需要写大lambda函数结合所有的字符上,你想过滤器,如:在注释中,你可以提出x => x == '(' || x == ')' || etc.
更新
像塞尼亚还可以使用更短的版本Set
只是改变功能acceptedChars.contains
给定字符的Set
:
givenList.filter(Set('(', ')'))
这将删除不相提并论的所有字符附着点:
val parens = chars.filter(c=>c=='('||c==')')
以下是我在斯卡拉控制台测试:
scala> val chars = List('a', 'b', '(', 'c', ')', ')')
chars: List[Char] = List(a, b, (, c,),))
scala> val parens = chars.filter(c=>c=='('||c==')')
parens: List[Char] = List((,),))
你的代码去除一切的原因是...第一滤波器(chars.filter(_ == '(')
)移除所有人物不是(
,这意味着只剩下(
。对此结果应用filter(_ == ')')
将返回空列表。
调用'filter(...).filter(...)'是否需要扫描列表两次? –