You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Erlang如何校验元组列表的所有元素原子存在于另一元组列表

Erlang 订单商品库存存在性校验实现

实现思路

  • 第一步提取库存列表中所有商品名,生成可快速查询的集合
  • 第二步遍历订单所有商品,逐一校验商品名是否存在于库存商品集合中,所有商品都存在则返回true,任意一个不存在返回false

基础实现(适合小体量库存列表)

直接用Erlang标准库lists模块的all和member方法实现,代码简洁易读:

check_products(AmountOfProducts, OrderProducts) ->
    % 提取库存所有商品名
    StockNames = [Name || {Name, _Count} <- AmountOfProducts],
    % 批量校验订单商品是否都在库存名列表中
    lists:all(fun({OrderName, _Demand}) -> lists:member(OrderName, StockNames) end, OrderProducts).

优化实现(适合大体量库存列表)

如果库存商品数量非常多,可将库存商品名转为sets集合降低查询复杂度,提升执行效率:

check_products(AmountOfProducts, OrderProducts) ->
    % 生成库存商品名集合,查询复杂度O(1)
    StockNameSet = sets:from_list([Name || {Name, _Count} <- AmountOfProducts]),
    lists:all(fun({OrderName, _Demand}) -> sets:is_element(OrderName, StockNameSet) end, OrderProducts).

效果测试

用你给出的示例测试返回结果符合预期:

1> AmountOfProducts = [{apple, 10}, {chocolate, 13}, {lettuce, 9}, {mango, 20}].
[{apple,10},{chocolate,13},{lettuce,9},{mango,20}]
2> OrderProducts = [{apple, 3}, {chocolate, 1}, {mango, 4}].
[{apple,3},{chocolate,1},{mango,4}]
3> check_products(AmountOfProducts, OrderProducts).
true

如果订单中出现库存不存在的商品,比如OrderProducts = [{apple,3}, {orange,2}],调用函数会返回false。


内容的提问来源于stack exchange,提问作者Marcelo Márquez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 04:57:03