簡體   English   中英

在C#中從字符串中刪除行+從字典中刪除舊條目

[英]Removing lines from a string + old entries from a Dictionary in C#

我有一個字典,第一個字符串,鍵的鍵,永遠都不能改變..它不能被刪除或任何其他..但是值,我一直在添加行,行和行到值..我只是用\\創建新行r \\ n或\\ r ..我只是想知道保留最后50行是最簡單的方法。 並刪除50行以上的任何內容..我這樣做是因為當我返回它時,我必須將值通過char數組放置,並遍歷每個字母,如果數據太多,這可能會很慢。 有什么建議么?

Guffa的一般想法是正確的-您的數據結構應反映您實際想要的內容,它是字符串列表,而不是單個字符串。 “最后50行”的概念很明顯與集合有關,而不是與單個字符串有關,即使您最初是這樣閱讀的。

但是,我建議使用LinkedList<T>而不是List<T> :每次刪除List<T>的第一個元素時,其他所有內容都必須重新整理。 List<T>對於提供隨機訪問非常有用,並且在添加到末尾時也不錯,但是從一開始就刪除很爛。 LinkedList<T>非常適合為您提供迭代器訪問權限,從一開始就添加/刪除,並從最后添加/刪除。 比較合適。 (如果您真的想去城鎮,您甚至可以編寫自己的固定大小的循環緩沖區類型來封裝您的邏輯;在您不希望出現這種情況的情況下,這樣做可以兼得兩全擴展到一定大小。)

關於您對Guffa答案的評論:將輸入轉換為更適合處理的形式,然后將其轉換回原始格式以進行輸出是很常見的。 您這樣做的原因恰好是“更合適的”位。 IMO不需要將字符串解析為換行符,這是“更新字典”操作的一部分。 特別是,聽起來您當前正在引入 “行”的概念,其中原始文本只是作為字符串讀取。 通過用換行符分隔字符串,可以有效地創建由字符串支持的自己的“集合”類。 與使用內置集合相比,這種方法效率低下,容易出錯,並且更難管理。 如果需要,可以很容易地在結尾處執行以換行符分隔的字符串的轉換,但這聽起來太早了。

而不是連接線,而是使用Dictionary<string, List<string>> 當您要向列表中添加字符串時,如果列表中已經包含50個字符串,則可以檢查計數並刪除第一個字符串:

List<string> list;
if (!theDictionary.TryGetValue(key, out list)) {
  theDictionary.Add(list = new List<string>());
}
if (list.Count == 50) {
  list.RemoveAt(0);
}
list.Add(line);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM