※ ChatGPTを利用し、要約された質問です(原文:数値を文字列として結合した結果を数値に変換する)
数値を文字列として結合した結果を数値に変換する方法とは?
このQ&Aのポイント
プログラムで複数の数値を文字列として結合し、それを数値に高速に変換する方法を教えてください。
現在のコードでは数値を文字にして結合し、それを数値に変換していますが、他にスマートな方法があるのか知りたいです。
この処理において、数値を文字列として結合することやキャスト処理が無駄な気がしています。効率的な方法があれば教えてください。
お世話になっております。
プログラムで、文字を結合した結果を数値に変換する処理にて
処理を高速化できる記述方法があるか質問させてください。
・やりたいこと
複数の数値を文字列として結合した結果を数値型に高速で変換したい。
・現在のコード(考え方 C#にて)
今、以下のように数値変換しているのですが、
これ以外の書き方で、スマートな方法はないでしょうか?
※結果がわかりやすいように変数はその都度宣言しています。
int i1 = "10";
int i2 = "2";
string sConcat = i1.ToString() + i2.ToString() ; // "102"
// To Int
int convertedInt = int.Parse( sConcat ) ; //102
// To Hex
int convertedHex = Convert.ToInt32( sConcat , 16 ); // 0x102
数値を文字にして結合して・・・またキャストというのが
無駄なような気がしています。
すみませんが、良い方法があればご教授ください。
お礼
sknbsknb2さん 回答ありがとうございます。 C#なので、べき乗に違うコードを行いましたが 10,000,000回処理で3秒と1.4秒程度ですが sknbsknb2さんのコードのほうが2倍程度早かったです! ありがとうございます。 --検証コード>> static void Main( string[] args ) { //初期化 Stopwatch _sw = new Stopwatch();//速度測定用クラス const int counter = 10000000;//実行回数 int i1 = 100; int i2 = 25; int convertedInt = 0; //-------------旧ロジック------------- Console.WriteLine( "旧ロジック" + counter + "回ループします" ); _sw.Start(); for( int i = 0; i < counter; i++ ) { convertedInt =Convert.ToInt32( i1.ToString() + i2.ToString() ); } _sw.Stop(); Console.WriteLine( string.Format( "実行時間:{0} //{1}", _sw.Elapsed.TotalSeconds, convertedInt ) ); _sw.Reset(); Console.WriteLine(); //-------------検証ロジック------------- convertedInt = 0; Console.WriteLine( "新ロジック" + counter + "回ループします" ); _sw.Start(); for( int i = 0; i < counter; i++ ) { //System.Math.Pow で累乗 convertedInt = Convert.ToInt32( i1 * System.Math.Pow( 10, i2.ToString().Length ) + i2 ) ; } _sw.Stop(); Console.WriteLine( string.Format( "実行時間:{0} //{1}", _sw.Elapsed.TotalSeconds, convertedInt ) ); } --結果>> 旧ロジック10000000回ループします 実行時間:3.2769354 //10025 新ロジック10000000回ループします 実行時間:1.4973275 //10025 続行するには何かキーを押してください . . .