我有一个列表,例如{ {1 ,1 }, "Q"}, { {2 ,3 }, "E"}, { {3 ,5 }, "Q"}, { {4 ,2 }, "Q"}, { {5 ,4 }, "Q"}, { {1 ,5 }, "E"}
,我需要在矩形网格中显示字符,例如,在这种情况下,5*5
网格,例如在(1, 1)
上,有一个字符Q
,在(2, 3)
上有一个字母Q
,...,而在(1, 5)
上有一个字母E
。并且网格中的所有剩余位置都显示为空白。
请帮帮我。
答案 0 :(得分:6)
SparseArray
已设置为执行此操作。这也使用@@@
,它是第1级Apply
的缩写:
dat =
{{{1, 1}, "Q"},
{{2, 3}, "E"},
{{3, 5}, "Q"},
{{4, 2}, "Q"},
{{5, 4}, "Q"},
{{1, 5}, "E"}};
SparseArray[Rule @@@ dat, {5, 5}, ""] // MatrixForm
SparseArray
的第二个参数(此处为{5, 5}
)是显式数组大小。您可以使用Automatic
将其大小调整到数据的最远点。第三个(可选)参数是用作数组“背景”的表达式。在这里,我使用空字符串""
来满足您对“空白”的请求。由于这变得难以阅读,您可能更喜欢网格线:
Grid[
SparseArray[Rule @@@ dat, {5, 5}, ""],
Frame -> All
]
答案 1 :(得分:3)
先生回答是最佳答案。但只是为了好玩,这里使用纯函数的方式略有不同
Grid[SparseArray[ #[[1]] -> #[[2]] & /@ dat, {5, 5}, ""], Frame -> All]