我在使用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
。
任何帮助都将不胜感激。
答案 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。