我正在使用elixir并尝试使用head和tail方法以某种特定形式获取数据。
我有这种数据["09:89-87:45", "23:23-23:23", "65:65-23:04"]
做头和尾?我可以将这些数据转换为[["09:89-87:45"], ["23:23-23:23"], ["65:65-23:04"]]
形式吗?
我现在正在做的事情并不顺利。
iex(14)> defmodule Gy do
...(14)> def get_head_tail([head|tail]) do
...(14)> [[head], get_head_tail(tail)]
...(14)> end
...(14)> def get_head_tail([]) do
...(14)> []
...(14)> end
...(14)> end
它返回[["09:89-87:45"], [["23:23-23:23"], [["65:65-23:04"], []]]]
任何帮助都将受到赞赏。
答案 0 :(得分:3)
这样的东西?
def wrap([]), do: []
def wrap([a|bs]) do
[[a]|wrap(bs)]
end
您使用了,
而不是|
,这意味着您创建了一个包含两个元素的列表,而不是将一个元素附加到列表的头部。
[1|[2|[3]]] == [1|[2,3]] == [1,2,3]
与
相比[1,[2,[3]]]
第二件事是你在一般情况之后定义了get_head_tail([])
的特例。您的版本仍然有效,但首先将特殊情况放在首位是一个好习惯,因为第一个匹配表达式(自顶向下)是使用的表达式。您编写的下一个函数可能没有相互排斥的子句,然后顺序就很重要。
答案 1 :(得分:1)
您还可以使用Enum.map/2来实现此结果:
iex> Enum.map(["09:89-87:45", "23:23-23:23", "65:65-23:04"], &([&1]))
[["09:89-87:45"], ["23:23-23:23"], ["65:65-23:04"]]
答案 2 :(得分:0)
Since, you go through full list and want to have exact number of elements as in original list, you can simply use list comprehension:
for x <-["09:89-87:45", "23:23-23:23", "65:65-23:04"], do: [x]