Как я могу добавить новый элемент в массив и сделать массив обновленным новым элементом в F #? - PullRequest
0 голосов
/ 05 ноября 2019
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)|]

Здравствуйте, у меня есть метод для добавления нового элемента в исходный массив. Однако метод не сохраняет обновленный массив и, следовательно, работает только после того, как я попробовал несколько разных, но ни один из них не сработал.

Ответы [ 2 ]

1 голос
/ 05 ноября 2019

Массивы 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|]

Приложение создает новый массив - оно не обновляет существующий массив.

Документация MS для массивов F #: здесь

0 голосов
/ 06 ноября 2019

Очевидно, что не очень идиоматический 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 ");("CocaCola", "smallCup");("Tuborg", "smallCup");("Пиво", "XL")]

ResizeArray - это псевдоним для C # List, который является изменяемым и изменяемым размером массивом. Вы можете добавлять, удалять и делать большинство необходимых вещей с помощью IEnumerable.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...