我發現這篇關于從陣列中選擇范圍的帖子,并且必須使用 LINQ 選項:
在 C# 中選擇陣列中的一系列專案
最終,我試圖從某個文本檔案中獲取最后四行。之后,我讀入并清除了不需要的字符和空行的行,我有一個包含所有行的陣列。我正在使用以下方法:
string[] allLines = GetEachLine(results);
string[] lastFourLines = allLines.Skip(allLines.Length - 4).Take(4).ToArray();
這很好用,但我想知道是否可以以某種方式跳過對 allLines 變數的賦值。如:
string[] lastFourLines = GetEachLine(results).Skip(returnedArrayLength - 4).Take(4).ToArray();
uj5u.com熱心網友回復:
如果GetEachLine()回傳string[]則應該可以正常作業,盡管可能需要進行空檢查。
當您鏈接更多時,您可能需要使用換行符來提高可讀性:
string[] lastFourLines = GetEachLine(results)
.Skip(allLines.Length - 4)
.Take(4)
.ToArray();
allLines.Length 將不存在,除非您仍然有問題中的第 1 行,您可以通過執行反向操作來避免兩次呼叫 GetEachLine(),取 4 然后再次反向。
string[] lastFourLines = GetEachLine(results)
.Reverse()
.Take(4)
.Reverse()
.ToArray();
uj5u.com熱心網友回復:
如果您希望有效地檢索大檔案的最后 N(過濾)行,則確實需要從讀取檔案內容的位置開始。
考慮一個包含 10M 記錄的 1GB 日志檔案,您只需要最后幾行。理想情況下,您可能希望從讀取最后幾個 KB 開始,然后通過從末尾搜索換行符來開始提取行,提取每一行并在迭代器產量中回傳它們。如果資料用完,請閱讀前面的塊。僅當消費者從迭代器請求更多值時才繼續。
順便說一句,我不知道這樣做的內置方法,并且從頭開始編碼可能會非常復雜。幸運的是,搜索發現了這個類似的問題,其答案評分很高。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/382382.html
