[英]Why F#'s List type doesn't have a Remove function?
我不明白为什么F#的List具有一个append函数(以不可变的友好方式返回另一个列表),却不具有remove
函数(我对将T用作参数的函数特别感兴趣,不是index:int,所以不是removeAt
)。
为什么会这样呢?
在这种情况下,“为什么”通常是“因为没有人实施”。 但是在这种情况下,我推测这可能也是一种设计选择。 考虑一下:
remove
函数将必须返回新的list值。 Map.remove key
或set and Set.remove item
,通常您不假定列表元素具有相等性,因此包括List.remove
且对项目具有相等性约束将破坏该假设。 鉴于这一信息, List.remove
只会是一个别名List.filter ((<>) item)
,所以你可以使用来代替。
这似乎是理所当然的,但是为什么要反复从List
删除项目呢? 我的意思是,如果您希望在拥有filter
后将其删除,但是如果您需要重复执行此操作,则List
可能不是您应该使用的集合,因为性能会很糟糕( O(n^2)
复杂度)。 因此,我认为最好不要在List
提供remove
,这样人们就不会错误地选择他们将要使用的收藏类型,这间接地鼓励人们了解收藏选择的隐患。 毕竟,F#中的List
是一个链表,而不仅仅是C#中的数组包装器。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.