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.toArray
或Seq.toList
无法将项目添加到零长度数组。您所能做的就是创建一个新数组来保存该项目。当前接受的答案,使用 Array.append,不修改输入数组;相反,它会创建一个新数组,其中包含两个输入数组的元素。如果您重复调用 append 将单个元素添加到数组,您将非常低效地使用内存。
相反,在 f# 中,使用 F# 的列表类型或对于某些应用程序,使用 ResizeArray<'T>(这是 f# 的标准 .NET 列表名称)更有意义。如果您确实需要数组中的项目(例如,因为您必须将它们传递给参数为数组类型的方法),那么按照史蒂夫在他的评论中建议的那样去做。建立集合后,如果您使用的是 F# 列表,请调用 List.toArray
或 Array.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.append
与 mutable
数组一起使用:
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
我在 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.toArray
或Seq.toList
无法将项目添加到零长度数组。您所能做的就是创建一个新数组来保存该项目。当前接受的答案,使用 Array.append,不修改输入数组;相反,它会创建一个新数组,其中包含两个输入数组的元素。如果您重复调用 append 将单个元素添加到数组,您将非常低效地使用内存。
相反,在 f# 中,使用 F# 的列表类型或对于某些应用程序,使用 ResizeArray<'T>(这是 f# 的标准 .NET 列表名称)更有意义。如果您确实需要数组中的项目(例如,因为您必须将它们传递给参数为数组类型的方法),那么按照史蒂夫在他的评论中建议的那样去做。建立集合后,如果您使用的是 F# 列表,请调用 List.toArray
或 Array.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.append
与 mutable
数组一起使用:
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