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)|]
您好,我这里有一个方法可以将新项目附加到源数组。但是,该方法不存储更新后的数组,因此,仅在我尝试了多种不同方法后才起作用,但是它们都没有起作用。
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
添加,删除和执行大多数所需的工作。