我有一個字符清單是斯卡拉我想刪除所有不是括號的字符。問題是,我似乎只是能夠爲一個字符做到這一點,如:斯卡拉 - 如何篩選兩個字符的列表
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(...)'是否需要掃描列表兩次? –