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

时间:2015-03-04 12:40:17

标签: arrays f#

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

 let name = "Someone"

我还有一个字符串数组:

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

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

4 个答案:

答案 0 :(得分:2)

看看Array.append

  

//签名:Array.append:'T [] - > 'T [] - > 'T []

     

//用法:Array.append array1 array2

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

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

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

答案 1 :(得分:2)

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

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

并以这种方式使用它:

let withSomeone = addToSequence [||] "Someone" 

获得结果序列后,您可以使用Seq.toArraySeq.toList

答案 2 :(得分:2)

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

相反,在f#中,使用F#的列表类型更有意义,或者对于某些应用程序,ResizeArray&lt;&gt; T&gt; (这是标准.NET列表的f#的名称)。如果你确实需要数组中的项(例如,因为你必须将它们传递给参数是数组类型的方法),那么就像史蒂夫在他的评论中所建议的那样。构建完集合后,如果您正在使用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

答案 3 :(得分:0)

您可以将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