haskell - 在列表中查找元素并返回字符串 - haskell
问题描述
嗨,我想显示第二天步行 0 分钟的狗的名字
type Dogs = (String, Float, Float, [Int]) -- Dog,Age,Weight,Time walked daily
testData :: [Dogs]
testData = [("Morris", 5, 8, [0,0,5,8,8,0,0]),
("Tinks", 3, 10, [12,8,15,0,0,0,2]),
("Cash", 6, 11, [0,6,5,0,0,0,3]),
("Lou", 5, 17, [0,2,10,7,8,2,2]),
("Kobi", 10, 12, [0,0,8,3,6,7,5])
("Nala", 7, 8, [8,16,20,3,4,9,2])]
所以输出将是莫里斯和科比,因为他们在列表中有 0 秒,但我不知道该怎么做,我对 haskell 很陌生。我知道我应该使用!! 1
从列表中获取第二个元素,但我不知道如何为列表中的元组中的多个列表执行此操作,然后输出为名称的字符串。任何帮助将不胜感激谢谢
解决方案
首先,您可以创建一个单独的函数来确定您正在寻找的条件是否得到满足:
isDay2Walked :: Dogs -> Bool
isDay2Walked (_, _, _, (_:x:_)) = x /= 0 -- pattern matching would be more elegant than (!! 1)
isDay2Walked _ = False -- return something if there is no information about the second day
然后,在列表的过滤器中使用此谓词,并提取第一个元素 - 名称:
getDogName :: Dogs -> String
getDogName (name, _, _, _) = name
getDogsNotWalkedOnDay2 :: [Dogs] -> [String]
getDogsNotWalkedOnDay2 = map getDogName . filter (not . isDay2Walked)
推荐阅读
- python - 在 BeautifulSoup 对象中使用 \n 清理表
- android - 在android 9上没有指定号码的短信网址(分享按钮)
- c - 偏移列所需的数学?
- python - 当一行属于多个类别时如何创建虚拟变量?
- c - 传递给函数的值变为 0
- php - 如何正确格式化此字符串以在 URL 中使用
- python - 如何检查 1 个列表的所有元素是否在列表 2 中*相同数量*且以任何顺序排列?
- c# - 如何通过 UDP 从使用移动热点的设备向家庭网络上的另一台设备发送数据?
- swift - 如果结果限制小于 1000,为什么我的 CKQueryOperation 只会返回游标?
- vba - 使用集合将列中的重复项转移到另一个页面