Как вывести сумму типов в записи в F#?

#list #math #f# #sum #record

Вопрос:

У меня есть приведенная ниже запись о том, сколько товаров было продано в магазине:

 type ShopEarnings = { Item: string;    Price: int; Quantity: int}
let pencils =       { Item= "Pencils"; Price = 2;  Quantity = 500 }
let pens =          { Item= "Pens";    Price = 5;  Quantity = 200 }
let labels =        { Item= "Labels";  Price = 3;  Quantity = 300 }
let rulers =        { Item= "Rulers";  Price = 5;  Quantity = 100 }
 

Я хочу рассчитать общее количество проданных товаров, чтобы я мог напечатать что-то вроде:

printfn "%i items were sold" totalItemsSold

и он выведет

Было продано 1100 наименований

Кроме того, мне не нужно будет вводить элементы для добавления вручную, если их будет 100.

Я пробовал разные подходы, такие как List.sum, но это не сработало. Каков был бы наилучший способ рассчитать общую сумму «Количества»?

Ответ №1:

List.sumBy сделаю это:

 let totalItemsSold =
    [pencils; pens; labels; rulers]
        |> List.sumBy (fun earnings -> earnings.Quantity)
printfn "%i items were sold" totalItemsSold
 

Комментарии:

1. Извините, я забыл упомянуть, что не хотел вводить функции вручную, потому что их могло быть 100.

2. Я не совсем понимаю, что вы подразумеваете под «функциями». Вы имеете в виду, что не хотите создавать список записей вручную, как это сделал я? Если у вас есть 100 записей, есть ли они в базе данных? Или у вас действительно есть 100 жестко закодированных записей, каждая из которых привязана к своему собственному имени, как в вашем примере? В любом случае, вам понадобится какой-то способ поместить записи в список или последовательность, чтобы вычислить сумму.

3. На данный момент они будут жестко закодированы, как и 5 выше. Да, я пытаюсь занести это в список.