我有一個大約4MB(400萬字符)的字符串和大約30.000行的變量。接下來我有一個字符的索引,可以說3605506
,找到這個字符在哪一行上最快最有效的方法是什麼?我需要在彼此之後做數百次,所以這是相對重要的,因爲它是高效的。按行查找位置
按行查找位置
回答
將字符串和和索引傳遞給下面的函數。它根據新的行字符拆分字符串,並檢查計數是否已通過索引值。
function getlineNumberofChar(data,index) {
var perLine = data.split('\n');
var total_length = 0;
for (i = 0; i < perLine.length; i++) {
total_length += perLine[i].length;
if (total_length >= index)
return i + 1;
}
}
不能贊成,但我真誠的驚喜你的代碼實際上是比我自己的簡單循環更高性能:http://jsperf.com/line-from-position – user5354681
你可以檢查這個聲明是否返回答案? data.substring(0,index).split('\ n')。長度 –
除了我沒有意識到你的函數返回了一行字節偏移量而不是行號,但這應該很容易修復(就像我在jsperf中所做的那樣) – user5354681
// Let this be your 4MB string.
var str = "This \n is a\n test\n string."
// Let this be the index of the character you are finding within the 4MB string.
var index = str.indexOf("test")
// Create substring from beginning to index of character.
var substr = str.substring(0, index)
// Count the number of new lines.
var numberOfLines = (function(){
try{
// Add 1 to final result to account for the first line.
return substr.match(new RegExp("\n", "g")).length + 1
} catch(e){
// Return 1 if none found because the character is found on the first line.
return 1
}})()
- 1. 查找位置執行
- 2. mysql查找行的位置
- 3. 查找位置
- 4. 查找位置
- 5. 在表中查找按鈕的位置
- 6. 查找位號碼位置
- 7. 查找位置 - PHP
- 8. 查找web.config位置
- 9. 自加入以查找行位置
- 10. 在屏幕上查找行的位置
- 11. 查找插入位置
- 12. 查找當前位置
- 13. 爲地理位置查找
- 14. 查找手機的位置
- 15. 查找用戶位置
- 16. 查找以矩陣位置
- 17. 查找X和Y位置
- 18. 查找像素位置
- 19. 查找附近的位置
- 20. Tuleap - 查找用戶位置
- 21. 查找設備的位置
- 22. 位置查找響應
- 23. 的XPath查找位置
- 24. 分析查詢按位置
- 25. 按特定距離查找距離目標位置最近的位置
- 26. 查找位置,定位實例
- 27. Laravel查找和查詢位置
- 28. 如何配置NuGet.exe命令工具行查找包的位置
- 29. 按鍵查找行excel vba
- 30. 按行查找號碼。 Javascript
我把它的行長度是可變的嗎? – nnnnnn
@nnnnnn是的,我現在已經實現了一個非常低效的臨時解決方案,我每次都在循環播放,並與角色位置進行比較......但它太慢而且感覺非常糟糕。 – user5354681
這個問題聽起來類似於 - > [確定行號從文本文件中的字節偏移](http://stackoverflow.com/questions/13609535/determine-line-number-from-byte-offset-in-a-text -文件)。 \t 您需要掃描文件並計算在接近字節偏移量時發現的新行數。 –