如何从Elixir中的嵌套列表中筛选特定值?

时间:2015-12-11 19:17:23

标签: elixir

如何在以下订单中仅返回嵌套列表元素:id匹配127?如何在列表中搜索它,"命令",而不知道它的位置(只是按值搜索)?

orders
[[id: 123, ship_to: :NC, net_amount: 100.0],
 [id: 124, ship_to: :OK, net_amount: 35.5],
 [id: 125, ship_to: :TX, net_amount: 24.0],
 [id: 126, ship_to: :TX, net_amount: 44.8],
 [id: 127, ship_to: :NC, net_amount: 25.0],
 [id: 128, ship_to: :MA, net_amount: 10.0],
 [id: 129, ship_to: :CA, net_amount: 102.0],
 [id: 139, ship_to: :NC, net_amount: 50.0]]

期望的结果:[id:127,ship_to:...]

1 个答案:

答案 0 :(得分:3)

您可以使用Enum.find/2。它需要一个可枚举的(如此处的orders列表)和一个函数,并返回函数返回真值的第一个元素(非false和非 - nil

Enum.find(orders, fn order -> {:id, 127} in order end)

这只是一种可能的解决方案;有很多可能的:)。例如,您也可以将[]语法与Enum.find/2一起使用:

Enum.find(orders, fn order -> order[:id] == 127 end)