Ang*_*ker 0 c# performance parsing .net-2.0
我有一个字符串,格式如下:
[季节] [年] [供应商] [地理]
所以一个例子可能是:2009年春季尼尔森MSA
我需要能够以最快的方式解析季节和年份.我不关心漂亮或聪明.只是原始速度.该语言是使用VS2008的C#,但该程序集是为.NET 2.0构建的
Jon*_*eet 11
如果你只需要季节和年份,那么:
int firstSpace = text.IndexOf(' ');
string season = text.Substring(0, firstSpace);
int secondSpace = text.IndexOf(' ', firstSpace + 1);
int year = int.Parse(text.Substring(firstSpace + 1,
secondSpace - firstSpace - 1));
Run Code Online (Sandbox Code Playgroud)
如果你可以假设年份总是四位数,那就更快了:
int firstSpace = text.IndexOf(' ');
string season = text.Substring(0, firstSpace);
int year = int.Parse(text.Substring(firstSpace + 1, 4));
Run Code Online (Sandbox Code Playgroud)
如果另外你知道所有年份都在21世纪,它可以变得愚蠢地最佳:
int firstSpace = text.IndexOf(' ');
string season = text.Substring(0, firstSpace);
int year = 2000 + 10 * (text[firstSpace + 3] - '0')
+ text[firstSpace + 4] - '0';
Run Code Online (Sandbox Code Playgroud)
它变得更不易读,但可能更快(取决于JIT的作用):
int firstSpace = text.IndexOf(' ');
string season = text.Substring(0, firstSpace);
int year = 1472 + 10 * text[firstSpace + 3] + text[firstSpace + 4];
Run Code Online (Sandbox Code Playgroud)
就个人而言,我认为至少迈出了一步,但是:)
编辑:好的,把它带到极端......你只会有几个季节,对吧?假设他们是"春天","夏天","秋天","冬天",那么你可以这样做:
string season;
int yearStart;
if (text[0] == 'S')
{
season = text[1] == 'p' ? "Spring" : "Summer";
yearStart = 7;
}
else if (text[0] == 'F')
{
season = "Fall";
yearStart = 5;
}
else
{
season = "Winter";
yearStart = 7;
}
int year = 1472 + 10 * text[yearStart + 2] + text[yearStart + 3];
Run Code Online (Sandbox Code Playgroud)
这样做的好处是它将重用相同的字符串对象.当然,它假设数据从未出现过任何问题......
使用SplitSpidey的回答肯定比任何一个简单,但我怀疑它会稍微慢一些.说实话,我至少先尝试一下 ......你测量过最简单的代码并发现它太慢了吗?差异可能非常小 - 当然,与您首先在数据中读取的任何网络或磁盘访问相比.
要添加到其他答案,如果您希望它们采用以下格式:
Spring xxxx
Summer xxxx
Autumn xxxx
Winter xxxx
Run Code Online (Sandbox Code Playgroud)
那么更快的方法是:
string season = text.Substring(0, 6);
int year = int.Parse(text.Substring(7, 4);
Run Code Online (Sandbox Code Playgroud)
但这是相当令人讨厌的.:)
我甚至不会考虑像这样编码.
| 归档时间: |
|
| 查看次数: |
2923 次 |
| 最近记录: |