我在 F# 中有一个字符串:
let name = "Someone"
Run Code Online (Sandbox Code Playgroud)
我还有一个字符串数组:
let mutable arraysOfNames : string[] = [||]
Run Code Online (Sandbox Code Playgroud)
我想将字符串名称添加到数组 arrayOfNames 中。我怎么做?它不一定是一个数组,它可以是一个序列或任何其他集合,我可以检查它是否为空。
无法将项目添加到零长度数组中。您所能做的就是创建一个保存该项目的新数组。当前接受的答案是使用 Array.append,不会修改输入数组;相反,它创建一个包含两个输入数组的元素的新数组。如果重复调用append将单个元素添加到数组中,则内存使用效率将极其低下。
相反,在 f# 中,使用 F# 的列表类型更有意义,或者对于某些应用程序,使用 ResizeArray<'T> (这是 f# 对标准 .NET 列表的名称)。如果您确实需要数组中的项目(例如,因为您必须将它们传递给参数为数组类型的方法),请按照 Steve 在他的评论中建议的方式进行操作。构建集合后,如果您使用的是 F# 列表,请调用List.toArray或;如果您使用的是 ResizeArray,请调用实例方法。Array.ofListToArray()
示例1:
let mutable listOfNames : string list = []
listOfNames <- "Alice" :: listOfNames
listOfNames <- "Bob" :: listOfNames
//...
let names = listOfNames |> List.toArray
Run Code Online (Sandbox Code Playgroud)
示例2:
let resizeArrayOfNames = ResizeArray<string>()
resizeArrayOfNames.Add "Alice"
resizeArrayOfNames.Add "Bob"
let names = resizeArrayOfNames.ToArray()
Run Code Online (Sandbox Code Playgroud)
请注意,在第一个示例中,您将以相反的顺序获得名称;如果您需要按照添加顺序相同的顺序,您需要
let names = listOfNames |> List.rev |> List.toArray
Run Code Online (Sandbox Code Playgroud)