F# 将字符串添加到字符串数组

F# add a string to an array of strings

我在 F# 中有一个字符串:

 let name = "Someone"

我还有一个字符串数组:

 let mutable arraysOfNames : string[] = [||]

我想将字符串名称添加到数组 arrayOfNames。我怎么做?它不必是一个数组,它可以是一个序列或任何其他我可以检查它是否为空的集合。

看看Array.append

// Signature: Array.append : 'T [] -> 'T [] -> 'T []

// Usage: Array.append array1 array2

所以在你的情况下,你可以这样使用它:

let name = "someone"
let mutable arrayOfNames = Array.append [|"test"; "abc"|] [|name|]
printfn "%A" arrayOfNames
//[|"test"; "abc"; "someone"|]

因此您只需将字符串转换为数组(通过使用 [|string|])。由于 Array 包含 append 函数,您可以通过这种方式将字符串附加到数组。

对于在 F# 中作为 IEnumerable<T> 别名的任何 Seq,您可以编写此函数:

let addToSequence aseq elm =  Seq.append aseq <| Seq.singleton elm 

并这样使用:

let withSomeone = addToSequence [||] "Someone" 

得到结果序列后可以使用Seq.toArraySeq.toList

无法将项目添加到零长度数组。您所能做的就是创建一个新数组来保存该项目。当前接受的答案,使用 Array.append,不修改输入数组;相反,它会创建一个新数组,其中包含两个输入数组的元素。如果您重复调用 append 将单个元素添加到数组,您将非常低效地使用内存。

相反,在 f# 中,使用 F# 的列表类型或对于某些应用程序,使用 ResizeArray<'T>(这是 f# 的标准 .NET 列表名称)更有意义。如果您确实需要数组中的项目(例如,因为您必须将它们传递给参数为数组类型的方法),那么按照史蒂夫在他的评论中建议的那样去做。建立集合后,如果您使用的是 F# 列表,请调用 List.toArrayArray.ofList,或者如果您使用的是 ResizeArray,请调用 ToArray() 实例方法。

示例 1:

let mutable listOfNames : string list = []
listOfNames <- "Alice" :: listOfNames
listOfNames <- "Bob" :: listOfNames
//...
let names = listOfNames |> List.toArray

示例 2:

let resizeArrayOfNames = ResizeArray<string>()
resizeArrayOfNames.Add "Alice"
resizeArrayOfNames.Add "Bob"
let names = resizeArrayOfNames.ToArray()

请注意,在第一个示例中,您将获得相反顺序的名称;如果您需要它们的顺序与它们的添加顺序相同,则需要

let names = listOfNames |> List.rev |> List.toArray

您可以将 Array.appendmutable 数组一起使用:

let mutable my_array = [||]
for i in 0 .. array_size do
    my_array  <- [|i|] |> Array.append my_array 
    // my_array  <- Array.append my_array [|i|]
printfn "my array is: %A" my_array