es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Erlang: cómo comprobar si todos los elementos de una lista de tuplas existen en otra lista de tuplas

Digamos que tengo dos listas: AmountOfProducts que tiene una lista de tuplas como

[ {manzana, 10}, {chocolate, 13}, {lechuga, 9}, {mango, 20} ]

Y la segunda lista es OrderProducts que tiene tuplas como

[ {manzana, 3}, {chocolate, 1}, {mango, 4} ]

El primer elemento es el átomo para el nombre del producto, el segundo elemento es la cantidad, para AmountOfProducts la cantidad es el número disponible y para OrderProducts es la cantidad que está pidiendo. ¿Hay alguna manera de comprobar si todos los átomos de OrderProducts existen dentro de AmountOfProducts y devolver un verdadero? ¿Y si, digamos, OrderProducts tuviera una tupla extra y su átomo no existiera dentro de AmountOfProducts para devolver falso? La idea es algo como esto:

AmountOfProducts = [ {manzana, 10}, {chocolate, 13}, {lechuga, 9}, {mango, 20} ]
OrderProducts = [ {manzana, 3}, {chocolate, 1}, {mango, 4} ]

check_products(AmountOfProducts, OrderProducts) ->
si
todos los átomos dentro de OrderProducts existen en AmountOfProducts -> verdadero;
uno o muchos de los átomos dentro de OrderProducts no existen en AmountOfProducts -> falso
fin.

En el caso dado de las dos listas, debería regresar verdadero. ¿Hay alguna manera de hacer esto? ¡Espero que esto tenga sentido! ¡Gracias!

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una manera de verificar si todos los átomos de OrderProducts existen dentro de AmountOfProducts y devolver verdadero. Aquí está la posible solución utilizando Erlang:

    check_products(AmountOfProducts, OrderProducts) ->
        Products = lists:map(fun({Producto, _}) -> Producto end, AmountOfProducts),
        Verificar = lists:all(fun({Producto, _}) -> lists:member(Producto, Products) end, OrderProducts),
        Verificar.
    

    Esta función toma dos parámetros, AmountOfProducts y OrderProducts, y primero obtiene una lista de solo los nombres de los productos de AmountOfProducts utilizando lists:map/2. Luego recorre cada pedido en OrderProducts y verifica si su nombre de producto existe en la lista Productos obtenida de AmountOfProducts. Si todos los productos en OrderProducts existen en AmountOfProducts, devuelve verdadero, de lo contrario devuelve falso. Al final, la función completa se ve así:

    -module(products).
    -export([check_products/2]).
    
    check_products(AmountOfProducts, OrderProducts) ->
        Products = lists:map(fun({Producto, _}) -> Producto end, AmountOfProducts),
        Verificar = lists:all(fun({Producto, _}) -> lists:member(Producto, Products) end, OrderProducts),
        Verificar.
    

    Para usar la función, puede llamarla así:

    AmountOfProducts = [{manzana, 10}, {chocolate, 13}, {lechuga, 9}, {mango, 20}],
    OrderProducts = [{manzana, 3}, {chocolate, 1}, {mango, 4}],
    check_products(AmountOfProducts, OrderProducts).
    

    Esto devolverá verdadero. Si agrega un pedido adicional de un producto que no existe en AmountOfProducts como este:

    OrderProducts = [{manzana, 3}, {chocolate, 1}, {mango, 4}, {pera, 5}],
    

    luego llamar check_products/2 devolverá falso.

Comments are closed.