string 数组 转 int 数组 4种方法效率都差不多没什么可说的,仅供记录。唉人老了脑子不好使了。
private int maxCount = 10000000;
private string[ ] GetData( )
{
string[ ] input = new string[maxCount];
for ( int i = 0; i < maxCount; i++ )
{
input[i] = i.ToString( );
}
return input;
}
private void button1_Click( object sender, EventArgs e )
{
string[ ] input = GetData( );
DateTime tStart = DateTime.Now;
int[ ] iTemp = new int[input.Length];
for ( int i = 0; i < input.Length; i++ )
{
iTemp[i] = int.Parse( input[i] );
}
label1.Text = String.Format( "{0}毫秒", ( DateTime.Now - tStart ).Milliseconds );
}
private void button2_Click( object sender, EventArgs e )
{
string[ ] input = GetData( );
DateTime tStart = DateTime.Now;
int[ ] output = Array.ConvertAll<string, int>( input, delegate( string s ) { return int.Parse( s ); } );
label2.Text = String.Format( "{0}毫秒", ( DateTime.Now - tStart ).Milliseconds );
}
private void button3_Click( object sender, EventArgs e )
{
string[ ] input = GetData( );
DateTime tStart = DateTime.Now;
int[ ] iTemp = new int[input.Length];
Array.ForEach( input, i =>
{
int idx = int.Parse( i );
iTemp[idx] = idx;
} );
label3.Text = String.Format( "{0}毫秒", ( DateTime.Now - tStart ).Milliseconds );
}
private void button4_Click( object sender, EventArgs e )
{
string[ ] input = GetData( );
DateTime tStart = DateTime.Now;
int[ ] output = Array.ConvertAll( input, s => int.Parse( s ) );
label4.Text = String.Format( "{0}毫秒", ( DateTime.Now - tStart ).Milliseconds );
}
button1 是最简单清楚的,考虑到4个方法的效率都差不多,所以还是它吧。
button2 是用Array类中的静态泛形式方法ConvertAll进行转换
delegate(string s) { return int.Parse(s); }这句表示:建立一个匿名委托,该委托关联的方法体是:return int.Parse(s); 将数组中的每个字符串强制转换成整形并返回添加给 output
这个方法是我网上找的很有深度,但效率没什么提高所以不推荐新手。
button3 是用Array类中的静态泛形式方法ForEach进行循环,用lambda 运算符代替委托。
button4 是button2的变形用lambda 运算符代替委托。现在懒人很多,少写点吧。
以上就是转换的4种方法,自己写给自己看的。效率都差不多,所以任选。OK
The End