Chr*_*son 2 c# performance input
我要从stdin读取一堆空格分隔的整数(35 33 2 3 251等).输入可以是数百万英镑,所以我想确保尽可能快地读取.目前,我很确定这不是这种情况:)
这就是我所拥有的:
string[] stringArr = Console.ReadLine().Split(' ');
var len = stringArr.Length;
int[] intArr = new int[len];
for (int i = 0; i < len; i++)
intArr[i] = Convert.ToInt32(stringArr[i]);
Run Code Online (Sandbox Code Playgroud)
以上就是诀窍,但对我来说似乎很笨拙.我过去在C#中并没有真正使用stdin,但我想有更快的方法可以做到这一点?
你可以通过逐字逐句阅读并做数学来做到最好:
static void Main(string[] args)
{
foreach (int i in Read(Console.In))
{
Console.WriteLine(i);
}
}
static IEnumerable<int> Read(TextReader rdr)
{
int ch;
bool neg = false;
int value = 0;
int count = 0;
while (-1 != (ch = rdr.Read()))
{
if (ch == 9 || ch == 10 || ch == 13 || ch == 32)
{
if (count > 0)
yield return neg ? -value : value;
count = 0;
value = 0;
neg = false;
}
else if (count == 0 && ch == '-')
{
neg = true;
}
else if (ch >= '0' && ch <= '9')
{
count++;
value = value*10 + (ch - '0');
}
else
throw new InvalidDataException();
}
if (count > 0)
yield return neg ? -value : value;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2818 次 |
| 最近记录: |