工作上轉換資料遇到一個資料排序是這樣的:
01,..,99,A0,..A9,AA,..AZ,Aa,..,Az,B0,..B9,BA,..BZ,Ba,..Bz,...其餘以此類推,最大只到Zz。這個資料固定只有2位長度。
任務是把這些文字項的資料,全部轉成數字項。
用最笨的方法 - 列舉對照法,那你的程式看起來會非常、非常地壯觀,千萬不要這樣做,雖然解得出來,但是不美,也沒有效率。
最好的方式就是用運算法,把這個值換算出來,程式如下:
private int convert_string(string s)
{
int j = 0;
int k = 0;
s = s.Trim();
if (s.Length == 1) //若長度為1
{
k = (int)s[0];
if (k >= 97 && k <= 122)
j = k - 61;
else if (k >= 65 && k <= 90)
j = k - 55;
else if (k >= 48 && k <= 57)
j = k - (int)'0';
}
else if (s.Length == 2) //若長度為2
{
k = (int)s[0];
if (k >= 97 && k <= 122)
j = (k - (int)'A' - 6) * 62 + 100;
else if (k >= 65 && k <= 90)
j = (k - (int)'A') * 62 + 100;
else if (k >= 48 && k <= 57)
j = (k - (int)'0') * 10;
k = (int)s[1];
if (k >= 97 && k <= 122)
j += k - 61;
else if (k >= 65 && k <= 90)
j += k - 55;
else if (k >= 48 && k <= 57)
j += k - (int)'0';
}
return j;
}
是否有一種「庖丁解牛」的感覺?千萬不要執著於資料的表面。有時候,用最快速、最直覺的方式解題,並不是最好的解法。
沒有留言:
張貼留言