F#/ .NET:将一个元素添加到List <t> </t>的数组中

时间:2013-03-01 21:22:00

标签: .net f#

我有以下F#代码:

let list = Array.create 5 (new ResizeArray<char>())
list.[0].Add('c')
printfn "%A" list

这是FSI控制台中的输出:

[|seq ['c']; seq ['c']; seq ['c']; seq ['c']; seq ['c']|]

对我来说似乎很奇怪,因为我试图仅将'c'添加到第一个索引,但它似乎添加到数组中的所有索引。我做错了什么?

1 个答案:

答案 0 :(得分:5)

您的list是一个包含5个元素的数组,但每个元素都引用相同的列表。您可以使用以下代码进行检查:

let d = list.[0].Equals(list.[1])

d将是真的。

这是因为您正在初始化列表的方式 - 您正在创建一个包含5个元素的列表,其中所有5个元素都是相同的值。

因此,当你执行list.[0].Add('c')时,它会正确地将元素附加到数组中的第一个列表,但由于所有元素都引用了相同的列表,所以它似乎将它附加到每个元素

您可以使用预期结果初始化列表(每个元素引用不同的列表):

let list = [| for i in 1 .. 5 -> new ResizeArray<char>() |]

正如ildjarn所说,这是一种更好的方法:

let list = Array.init 5 (fun _ -> ResizeArray())