如何在 Elixir 中循环创建地图

hak*_*nin 1 elixir

我正在创建一个二维地图,并希望首先用空值预先填充它。

我知道以下内容在 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)

我尝试过将其作为二维数组,但我认为以坐标元组为键的平面地图会更容易使用。

我知道我应该使用递归,但我真的不知道如何优雅地做到这一点,而且这种情况不断出现,而且我还没有看到一种简单/通用的方法来做到这一点。

AA.*_*AA. 5

使用推导式的一行:

    for x <- 1..10, y <- 1..10, into: %{}, do: {{x, y}, " "}
Run Code Online (Sandbox Code Playgroud)