Reputation: 83
I have this list of tuples:
[{denomination_flexible_denomination,236,9,2,"1","CORE BALANCE",0,10,"1","500","100","100",null,"ecrlrlep_facilito","ecrlrlep_facilito","true","[{codigo_producto, \"0010701020\"}, {tipo_trx_pago, \"10220\"}, {tipo_trx_consulta, \"310220\"}, {payment_type, \"electronic_money\"}]"},
{denomination_flexible_denomination,239,8,2,"2","CORE BALANCE",0,10,"1","500","100","100",null,"ecrlrlep_facilito","ecrlrlep_facilito","true","[{codigo_producto, \"0010701020\"}, {tipo_trx_pago, \"10120\"}, {tipo_trx_consulta, \"310120\"}, {payment_type, \"electronic_money\"}]"}]
and I need to extract the tuple that contains the denomination_flexible_denomination 239. Does someone know how to do that?
Upvotes: 1
Views: 243
Reputation: 26121
1> L = [{denomination_flexible_denomination,236,9,2,"1","CORE BALANCE",0,10,"1","500","100","100",null,"ecrlrlep_facilito","ecrlrlep_facilito","true","[{codigo_producto, \"0010701020\"}, {tipo_trx_pago, \"10220\"}, {tipo_trx_consulta, \"310220\"}, {payment_type, \"electronic_money\"}]"},
1> {denomination_flexible_denomination,239,8,2,"2","CORE BALANCE",0,10,"1","500","100","100",null,"ecrlrlep_facilito","ecrlrlep_facilito","true","[{codigo_producto, \"0010701020\"}, {tipo_trx_pago, \"10120\"}, {tipo_trx_consulta, \"310120\"}, {payment_type, \"electronic_money\"}]"}].
[{denomination_flexible_denomination,236,9,2,"1",
"CORE BALANCE",0,10,"1","500","100","100",null,
"ecrlrlep_facilito","ecrlrlep_facilito","true",
"[{codigo_producto, \"0010701020\"}, {tipo_trx_pago, \"10220\"}, {tipo_trx_consulta, \"310220\"}, {payment_type, \"electronic_money\"}]"},
{denomination_flexible_denomination,239,8,2,"2",
"CORE BALANCE",0,10,"1","500","100","100",null,
"ecrlrlep_facilito","ecrlrlep_facilito","true",
"[{codigo_producto, \"0010701020\"}, {tipo_trx_pago, \"10120\"}, {tipo_trx_consulta, \"310120\"}, {payment_type, \"electronic_money\"}]"}]
2> [ X || {denomination_flexible_denomination, 239, _,_,_,_,_,_,_,_,_,_,_,_,_,_,_} =X <- L].
[{denomination_flexible_denomination,239,8,2,"2",
"CORE BALANCE",0,10,"1","500","100","100",null,
"ecrlrlep_facilito","ecrlrlep_facilito","true",
"[{codigo_producto, \"0010701020\"}, {tipo_trx_pago, \"10120\"}, {tipo_trx_consulta, \"310120\"}, {payment_type, \"electronic_money\"}]"}]
or
3> [ X || X <- L, element(1,X) =:= denomination_flexible_denomination, element(2, X) =:= 239].
[{denomination_flexible_denomination,239,8,2,"2",
"CORE BALANCE",0,10,"1","500","100","100",null,
"ecrlrlep_facilito","ecrlrlep_facilito","true",
"[{codigo_producto, \"0010701020\"}, {tipo_trx_pago, \"10120\"}, {tipo_trx_consulta, \"310120\"}, {payment_type, \"electronic_money\"}]"}]
or
4> list_to_tuple([ list_to_atom("field_" ++ integer_to_list(X)) || X <- lists:seq(1,16) ]).
{field_1,field_2,field_3,field_4,field_5,field_6,field_7,
field_8,field_9,field_10,field_11,field_12,field_13,
field_14,field_15,field_16}
5> rd(denomination_flexible_denomination, v(-1)).
denomination_flexible_denomination
6> [ X || #denomination_flexible_denomination{field_1 = 239} = X <- L].
[#denomination_flexible_denomination{field_1 = 239,
field_2 = 8,field_3 = 2,field_4 = "2",
field_5 = "CORE BALANCE",field_6 = 0,field_7 = 10,
field_8 = "1",field_9 = "500",field_10 = "100",
field_11 = "100",field_12 = null,
field_13 = "ecrlrlep_facilito",
field_14 = "ecrlrlep_facilito",field_15 = "true",
field_16 = "[{codigo_producto, \"0010701020\"}, {tipo_trx_pago, \"10120\"}, {tipo_trx_consulta, \"310120\"}, {payment_type, \"electronic_money\"}]"}]
Upvotes: 0
Reputation:
The easiest way to use lists:filter
TupleList = [{denomination_flexible_denomination,236,9,2,"1","CORE BALANCE",0,10,"1","500","100","100",null,"ecrlrlep_facilito","ecrlrlep_facilito","true","[{codigo_producto, \"0010701020\"}, {tipo_trx_pago, \"10220\"}, {tipo_trx_consulta, \"310220\"}, {payment_type, \"electronic_money\"}]"},{denomination_flexible_denomination,239,8,2,"2","CORE BALANCE",0,10,"1","500","100","100",null,"ecrlrlep_facilito","ecrlrlep_facilito","true","[{codigo_producto, \"0010701020\"}, {tipo_trx_pago, \"10120\"}, {tipo_trx_consulta, \"310120\"}, {payment_type, \"electronic_money\"}]"}].
R=lists:filter(fun(Tuple)->(element(1,Tuple)=:=denomination_flexible_denomination) and (element(2,Tuple)=:=239) end,TupleList).
Upvotes: 0
Reputation: 41527
Use lists:keyfind/3
. Its arguments are the key (in this case 239), the position in the tuple (2, as it is the second tuple element), and the tuple list:
> lists:keyfind(239, 2, TupleList).
{denomination_flexible_denomination,239,8,2,"2",
"CORE BALANCE",0,10,"1","500","100","100",null,
"ecrlrlep_facilito","ecrlrlep_facilito","true",
"[{codigo_producto, \"0010701020\"}, {tipo_trx_pago, \"10120\"}, {tipo_trx_consulta, \"310120\"}, {payment_type, \"electronic_money\"}]"}
If there is no matching element, lists:keyfind/3
returns false
.
Upvotes: 3