我正在创建一个二维地图,并希望首先用空值预先填充它。
我知道以下内容在 Elixir 中不起作用,但这就是我想要做的。
def empty_map(size_x, size_y) do
map = %{}
for x <- 1..size_x do
for y <- 1..size_y do
map = Map.put(map, {x, y}, " ")
end
end
end
Run Code Online (Sandbox Code Playgroud)
然后我将在地图上绘制形状,例如
def create_room(map, {from_x, from_y}, {width, height}) do
for x in from_x..(from_x + width) do
for y in from_x..(from_x + width) do
if # first line, or last line, or first col, or last col
map = Map.replace(map, x, y, '#')
else
map = Map.replace(map, x, y, '.')
end
end
end
end
Run Code Online (Sandbox Code Playgroud)
我尝试过将其作为二维数组,但我认为以坐标元组为键的平面地图会更容易使用。
我知道我应该使用递归,但我真的不知道如何优雅地做到这一点,而且这种情况不断出现,而且我还没有看到一种简单/通用的方法来做到这一点。
使用推导式的一行:
for x <- 1..10, y <- 1..10, into: %{}, do: {{x, y}, " "}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2470 次 |
| 最近记录: |