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.replicateSeq.takeSeq.iter 等等。 F# 也有一些不错的优点,比如 List.ofArray 不会像 Haskell 中的 getElems 那样堆栈溢出。哦,好吧...【参考方案3】:

我会考虑使用

[|for i in 1..100 -> new System.DateTime() |]

因为您正在处理可变数据。

【讨论】:

DateTime 什么时候可变了? 是的,我只是试图否决我的答案。不记得它是结构还是类。无论如何应该只使用浮点数。 使用不可变集合还是可变集合(如数组)并不真正取决于元素类型的可变性。拥有一个不可变类型的数组是完全可以的。 - 但是,必须小心像Map 这样的排序集合。更改 Map 的可变关键元素肯定是个坏主意。 @Brent,你用“只是试图否决我的答案”让我大吃一惊。顺便说一句 - DateTime 是一个结构/值类型。我不是你所说的浮动的意思。 你刚刚创建了一个数组,而不是一个列表。你不是吗?

以上是关于F# - 将 100 个对象创建到一个列表中 - 最实用和惯用的方式的主要内容,如果未能解决你的问题,请参考以下文章

Linux:将 100 万个文件移动到基​​于前缀创建的文件夹中

将命名向量添加到列表中

将 QtCreator 中的 Qt 对象放入 Python 列表中

在迭代期间将对象添加到现有列表

ABAP/4如何将数据输出到屏幕

Python 面向对象进阶