看板 C_and_CPP 關於我們 聯絡資訊
想到這問題是,ffmpeg做jpeg壓縮用的quality與IJG不一樣 所以要做個轉換, 但不是只用在這種情況。 程式裡常會用到很多區間的時機,區間間距不等時, 寫出來代碼很丑: 好比: 100分到96分 -> A+ 90分到95分 -> A 80分到89分 -> B : 59分以下-> GG 注意區間大小不一樣 我的實作是這樣: enum level {AX, A, B, ..., BB}; enum level GradeToLevel(unsigned int grade) { if(grade >= 96) return AX; if(grade >=90) return A; if(grade >= 80) return B; : return GG; } 這樣若列舉項多點,會寫的很長,實在不雅, 有沒優雅點的寫法呢? 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 116.59.239.127
chchwy:這樣明白清楚 不是很好嗎 11/25 23:59
※ 編輯: slowOne 來自: 116.59.239.127 (11/26 00:04)
wtvwtvwtv200:區間多的話把區間分界點寫在陣列裡,再用for去跑? 11/26 00:15
EdisonX:我一直認為這是不能兩全的問題 @@ 11/26 00:24
EdisonX:不過討論下去又要發一篇文了Orz 11/26 00:26
stupid0319:用查表法就不用一堆IF了 11/26 00:57
diabloevagto:查表法code更長... 11/26 01:26
uranusjr:我也是想到二樓的作法 11/26 01:53
wa120:hashtable 11/26 02:13
wa120:先寫一個init到0~100陣列裡,在直接array[90]這樣 11/26 02:15
loveme00835:這樣寫最優雅 11/26 02:35
linotwo:http://codepad.org/vOdUjepT 11/26 05:41
linotwo:如果只是想要短一點的話可以用 define 11/26 05:41
bigpigbigpig:可以試試C++/STL的lower_bound()或upper_bound() :) 11/26 05:42
damody:也許MPFI:multiple precision interval 合你需要 11/26 11:46
tomnelson:如果真要寫,我想到的也是wa120的方式,先建表,然後判斷的 11/26 23:32
tomnelson:部份就只要return map[分數],這樣最好.當然建表要花空間 11/26 23:34
tomnelson:如果連分數0~100這個有101個元素的表也要省的話,表可以 11/26 23:36
tomnelson:用char或unsigned char來當單位元素大小. 11/26 23:38
EdisonX:linotwo 的奇淫怪技讓我研究好久... 11/26 23:54
EdisonX:hashtable 有限制,只能吃整數. 11/26 23:55
jackylu63:轉換函式若為單調函數可考慮使用二元搜尋法 11/27 00:09
jackylu63:速度快的不得了^_< 11/27 00:10
kevingwn:gcc的特殊用法 case 95 ... 100: break; 11/28 21:32