簡體   English   中英

從字符串列表中過濾奇數長度的字符串

[英]Filtering odd length strings from a list of strings

我正在解決這個問題:使用 map、filter 和 (.)(函數組合運算符),定義一個檢查字符串列表的函數,只保留那些長度為奇數的字符串,將它們轉換為大寫字母,並連接結果生成單個字符串。

我知道我可以通過列表理解來做到這一點,但我已經明確指示使用過濾器。 現在,我的代碼如下所示:

concatenateAndUpcaseOddLengthStrings :: [String] -> String
concatenateAndUpcaseOddLengthStrings [] = ""
concatenateAndUpcaseOddLengthStrings xs = filter (\x -> length x `mod` 2 == 1) xs

我收到此錯誤:無法匹配類型 '[Char]' 與 'Char' 預期類型:字符串實際類型:[[Char]]

我正在添加其他組件之前測試過濾器功能,但我無法克服此錯誤。 有任何想法嗎?

產生錯誤的原因是filter (…) xs表達式將返回一個字符串列表,而不是單個字符串。 但是您的類型簽名指定:

concatenateAndUpcaseOddLengthStrings :: [String] -> String

所以它需要一個String ,而不是一個[String] 您可以在此處使用concat :: [[a]] -> [a]來連接字符串:

concatenateAndUpcaseOddLengthStrings :: [String] -> String
concatenateAndUpcaseOddLengthStrings xs = concat (filter (odd . length) xs)

甚至更短:

concatenateAndUpcaseOddLengthStrings :: [String] -> String
concatenateAndUpcaseOddLengthStrings = concat . filter (odd . length)

但是,您仍然需要實現這樣一個事實,即它會將保留的字符串中的字符轉換為它們的大寫變體。 我把它留作練習。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM