我在F#中有一个字符串:
let name = "Someone"
我还有一个字符串数组:
let mutable arraysOfNames : string[] = [||]
我想将字符串名称添加到数组arrayOfNames中。我怎么做?它不必是一个数组,它可以是一个序列或任何其他集合,我可以检查它是否为空。
答案 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.toArray
或Seq.toList
答案 2 :(得分:2)
无法将项添加到零长度数组中。您所能做的就是创建一个包含项目的新数组。当前接受的答案,使用Array.append,不会修改输入数组;相反,它创建一个包含两个输入数组元素的新数组。如果你反复调用append将一个元素添加到数组中,那么你将非常低效地使用内存。
相反,在f#中,使用F#的列表类型更有意义,或者对于某些应用程序,ResizeArray&lt;&gt; T&gt; (这是标准.NET列表的f#的名称)。如果你确实需要数组中的项(例如,因为你必须将它们传递给参数是数组类型的方法),那么就像史蒂夫在他的评论中所建议的那样。构建完集合后,如果您正在使用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
答案 3 :(得分:0)
您可以将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