F# - 将 100 个对象创建到一个列表中 - 最实用和惯用的方式
Posted
技术标签:
【中文标题】F# - 将 100 个对象创建到一个列表中 - 最实用和惯用的方式【英文标题】:F# - creating 100 objects into a List - most functional and idiomatic way 【发布时间】:2011-08-01 17:20:06 【问题描述】:在 F# 中,将 100 个新对象创建或“更新”到一个列表中的最实用和最惯用的方法是什么。
我想举个例子,我们可以使用 DateTime 作为示例对象。
【问题讨论】:
在我们刚刚做的方案中(我对此很生疏):声明 appendlist list xtogo append (if (> x 0) (appendlist (cons list append) (- xtogo 1) append) (列表)) 【参考方案1】:List.init 100 (fun x -> x * 2)
【讨论】:
不错。谢谢。 List.init 100 (fun x -> new System.DateTime()) 可以说更加地道(而且更短):List.init 100 (fun _ -> DateTime())
【参考方案2】:
或者,作为列表表达式:
[for i in 1..100 -> new System.DateTime()]
但我认为这不太惯用。
【讨论】:
@Ingo:在 F# 中,你有这样的“序列”。例如,(Seq.initInfinite id)
是非负整数。
@Ingo:F# 有List.replicate
、Seq.take
、Seq.iter
等等。 F# 也有一些不错的优点,比如 List.ofArray
不会像 Haskell 中的 getElems
那样堆栈溢出。哦,好吧...【参考方案3】:
我会考虑使用
[|for i in 1..100 -> new System.DateTime() |]
因为您正在处理可变数据。
【讨论】:
DateTime
什么时候可变了?
是的,我只是试图否决我的答案。不记得它是结构还是类。无论如何应该只使用浮点数。
使用不可变集合还是可变集合(如数组)并不真正取决于元素类型的可变性。拥有一个不可变类型的数组是完全可以的。 - 但是,必须小心像Map
这样的排序集合。更改 Map
的可变关键元素肯定是个坏主意。
@Brent,你用“只是试图否决我的答案”让我大吃一惊。顺便说一句 - DateTime 是一个结构/值类型。我不是你所说的浮动的意思。
你刚刚创建了一个数组,而不是一个列表。你不是吗?以上是关于F# - 将 100 个对象创建到一个列表中 - 最实用和惯用的方式的主要内容,如果未能解决你的问题,请参考以下文章
Linux:将 100 万个文件移动到基于前缀创建的文件夹中