如何将新项目附加到数组并使用F#中的新项目更新数组?

let source =  [|(CocaCola,bigBottle); (CocaCola,smallCup); (Tuborg,smallCup)|]


//the method can't store the updated array. 
let  mkOrder (dr:liquid,cont:Containment) = Array.append source [|(dr,cont)|]

您好,我这里有一个方法可以将新项目附加到源数组。但是,该方法不会存储更新后的数组,因此,仅在我尝试了多种不同方法后才起作用,但是它们都没有起作用。

lemon2334 回答:如何将新项目附加到数组并使用F#中的新项目更新数组?

F#数组是

  

固定大小,基于零的可变连续数据集合   相同类型的元素

因此,这意味着尽管您可以在位置n更改元素的值,但不能将数组扩展为包含更多元素。因此,您的mkOrder函数正在做的是获取数组source并通过向其添加新元素来创建新数组,除非您捕获mkOrder返回的新数组,否则它将迷路了。如果您打开一个交互式窗口,然后尝试以下操作:

> let array1 = [| 1; 2; 3 |];;
val array1 : int [] = [|1; 2; 3|]

> let array2 = Array.append array1 [|4|];;
val array2 : int [] = [|1; 2; 3; 4|]

> array1;;
val it : int [] = [|1; 2; 3|]

> array2;;
val it : int [] = [|1; 2; 3; 4|]

该附录会创建一个新数组-它不会更新现有数组。

F#数组的MS文档为here

,

F#显然不是很惯用,但可以随时阐明您需要哪种数据结构以及如何使用它:

open System.Collections.Generic
let source =  ResizeArray<string * string >( [("CocaCola","bigBottle"); ("CocaCola","smallCup"); ("Tuborg","smallCup")])
source.Add("Beer","XL")
source
  

val it:ResizeArray = seq       [(“” CocaCola“,” bigBottle“); (“可口可乐”,“小杯”);        (“ Tuborg”,“ smallCup”); (“啤酒”,“ XL”)]

ResizeArray是C#的List的别名,它是一个可变且可调整大小的数组。您可以使用IEnumerable添加,删除并完成大多数所需的工作。

本文链接:https://www.f2er.com/3159230.html

大家都在问