我发现了类似的问题,
但是他们没有回答问题-效率更高吗?
我正在用C#编写一个基本的小型控制台游戏,需要反复清除并写入控制台以刷新游戏状态。在寻找比当前尝试更有效的方法时,使用嵌套的for循环遍历数组并以这种方式进行打印,我在Java中找到了这一点:
Arrays.deepToString(arrayName);
这是我想要实现的目标。
这样比在Java中使用嵌套循环更有效吗?:
String[][] map = new String[10][10];
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
map[i][j] = "=";
}
}
boolean firstRun = true;
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 10; j++)
{
if (j == 0 && firstRun == false)
{
System.out.print("\n");
}
System.out.print(map[i][j]);
firstRun = false;
}
}
如果效率更高,是否有等效的C#库?我似乎找不到任何人甚至在任何地方问一个人。
答案 0 :(得分:3)
您从错误的角度看待这个问题:
最放心:与在内存中处理几乎没有的数组相比,以这种方式打印到标准输出的成本要很多倍(有关某些示例数据,请参见here)。
因此,真正的答案是:您可以在此处安全地忽略性能方面。
相反,请花费时间来编写易于阅读,理解和维护的代码。从那里开始,对Arrays.deepToString(arrayName);
的 single 调用比编写类似的自定义循环要好得多。
请紧记:在Java世界中,运行时性能并非来自编写“灵巧”的源代码。它来自于JIT,它决定“此代码经常使用,我应该将其转换为机器代码”。如果JIT认为“不值得优化”,则不值得优化。如果值得优化,则使JIT易于实现。通过编写简单的代码。
长话短说:实现功能是一个不错的练习,但是既然您已经实现了,就把它扔掉,然后使用适合您的库调用即可。