从数组erlang中打印出一个给定的元组

时间:2015-10-01 00:45:27

标签: arrays printing erlang tuples

我在使用erlang时遇到一些小问题,即我想要打印出数组的给定部分,但是,我似乎无法轻易做到这一点。

以下是我尝试使用array:get(X, Array)打印的数组。

[{carrier, [{e,10}, {f,10}, {g,10}, {h,10}, {i,10}]}, 
{battleship, [{a,1}, {a,2}, {a,3}, {a,4}]}, 
{cruiser, [{e,3}, {e,4}, {e,5}]}, 
{destroyer, [{f,4},{g,4}, {h,4}]}, 
{patrol_boat, [{j,7},{j,8}]}]

我可以打印出整个阵列,但是我无法从中获得一个元组。

理想情况下,我可以element(1, array:get(0, Array)).返回carrier

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:3)

您的构造是一个列表,而不是一个数组。 Erlang array是完全不同的东西。您需要查看lists module

要获取第一个元素,可以使用模式匹配。这是一个示例shell会话:

1> List = [{carrier, [{e,10}, {f,10}, {g,10}, {h,10}, {i,10}]}, 
           {battleship, [{a,1}, {a,2}, {a,3}, {a,4}]}, 
           {cruiser, [{e,3}, {e,4}, {e,5}]}, 
           {destroyer, [{f,4},{g,4}, {h,4}]}, 
           {patrol_boat, [{j,7},{j,8}]}].
[{carrier,[{e,10},{f,10},{g,10},{h,10},{i,10}]},
 {battleship,[{a,1},{a,2},{a,3},{a,4}]},
 {cruiser,[{e,3},{e,4},{e,5}]},
 {destroyer,[{f,4},{g,4},{h,4}]},
 {patrol_boat,[{j,7},{j,8}]}]
2> [{ShipType, _}|_] = List.
[{carrier,[{e,10},{f,10},{g,10},{h,10},{i,10}]},
 {battleship,[{a,1},{a,2},{a,3},{a,4}]},
 {cruiser,[{e,3},{e,4},{e,5}]},
 {destroyer,[{f,4},{g,4},{h,4}]},
 {patrol_boat,[{j,7},{j,8}]}]
3> ShipType.
carrier

如您所见,ShipType将从此次匹配设为carrier

要获取列表中的其他元素,您可以使用lists:nth/2。例如,要获取整个第3个元素:

4> Third = lists:nth(3, List).
{cruiser,[{e,3},{e,4},{e,5}]}

有关Erlang列表的更多信息,请查看任何Erlang书籍或any of these resources