[請益] 幾個演算法與效率問題
#1
if (strpos($folder, ": ") === false) continue;
else {
$find = substr($folder, 0, strpos($folder, ": "));
$replace = substr($folder, strpos($folder, ": ") + 2);
}
#2
if (($p=strpos($folder, ": ")) === false) continue;
else {
$find = substr($folder, 0, $p);
$replace = substr($folder, $p + 2);
}
如題,
使用 php,
以上同一效果的二個寫法,後續只需要用 $find 和 $replace, $p 用不到,
實測在約15次以下前者快,以上後者快,
可是我的程式可能跑這個部分的次數不多,
應選何者較優?
#1
txt = txt.replace(/\r\n?/g,'\n');
#2
txt = txt.split('\r\n').join('\n').split('\r').join('\n');
#3
txt = txt.replaceAll('\r\n','\n').replaceAll('\r','\n');
String.prototype.replaceAll = function(r,n) {
return this.split(r).join(n);
}
如題,以上用 javascript 統一換行字元,一種用 regexp,一種用split+join,
何者較建議使用?
還有在下用以下程式碼實測時,有時跳出的數字差很多是為什麼?
(比如一次 4ms,一次 36 ms,有時還會跳出負值)
var t = new Date();
var txt = document.getElementById('input').innerHTML; // input 填一段字串
var I = 100000;
for (var i=0;i<I;++i){
txt = txt.replace(/\r\n?/g,'\n');
//txt = txt.split('\r\n').join('\n').split('\r').join('\n');
//txt = txt.replaceAll('\r\n','\n').replaceAll('\r','\n');
}
var s = (new Date()-t) + 'ms';
alert(s);
以上問題在下需求很簡單,
就是用盡可能效率佳但尚不致太難維護的程式碼達到相同效果。
如果要看情況,煩請列舉不同常見情況下的不同考量,感謝感謝。
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.45.58.108
※ 編輯: danny0838 來自: 114.45.58.108 (01/03 11:11)
→
01/03 20:38, , 1F
01/03 20:38, 1F
→
01/03 20:38, , 2F
01/03 20:38, 2F
→
01/03 20:38, , 3F
01/03 20:38, 3F
→
01/03 20:38, , 4F
01/03 20:38, 4F
推
01/03 21:19, , 5F
01/03 21:19, 5F
推
01/03 21:27, , 6F
01/03 21:27, 6F
→
01/03 21:27, , 7F
01/03 21:27, 7F
→
01/03 21:27, , 8F
01/03 21:27, 8F
→
01/03 21:27, , 9F
01/03 21:27, 9F
推
01/03 23:40, , 10F
01/03 23:40, 10F