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

问题描述 投票:1回答:2
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)|]

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

arrays f# append
2个回答
1
投票

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


0
投票

显然不是很惯用的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添加,删除和执行大多数所需的工作。

© www.soinside.com 2019 - 2024. All rights reserved.