假設我需要一個函數從字符串str
過濾掉chars
字符,然後從結果只拿k
第一字符:如何一次處理懶惰的兩個字符串?
def cleanTrim(str: String, chars: Set[Char], k: Int): String =
str.filterNot(chars).take(k)
這個實現是不理想的,因爲它不必要地掃描整個字符串。爲了優化它,我們可以使用view
或事件Stream
掃描輸入懶洋洋地,e.g:
def cleanTrim(str: String, chars: Set[Char], k: Int): String =
str.view.foldLeft("") { case (r, c) => if (chars.contains(c)) r + c else r }.take(k)
現在假設我需要清理和修剪懶洋洋地字符串。我想fold
他們懶惰地一次處理他們兩個單個字符並返回兩個結果。
def cleanTrim2(str1: String,
str2: String,
chars: Set[Char],
k: Int): (String, String) = ???
你會如何建議實施它?
你把兩個字符串過濾器他們並返回一個單一的字符串?你回來哪一個? –
我的錯誤。我需要返回兩者。更新問題。 – Michael
爲什麼不採取一個序列,將其全部摺疊並返回? –