我有一个字典第一个字符串,关键的一定不能改变..它不能被删除或任何..但值,我不断添加行,线和线的值..我只是创建新的线\ r \ n或\ r ..我只是想知道什么是最简单的方法来保留最后50行。并删除50行以上的任何东西..即时做到这一点,因为当我返回它时,我必须通过一个字符数组,并通过每个字母,这可以是缓慢的,如果有太多的数据。有什么建议么?从字符串中删除行+从C#中的字典中删除旧的条目
0
A
回答
1
相反串接线,使用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);
2
Guffa的总体思路是正确的 - 你的数据结构应该反映你真正想要,这是一个字符串列表而不是单个字符串。 “最后50行”的概念很明显与集合而非单个字符串有关,即使您最初是以这种方式阅读的。
但是,我建议使用LinkedList<T>
而不是List<T>
:每次删除List<T>
的第一个元素时,其他所有内容都必须洗牌。 List<T>
非常适合随机访问,并且在添加到最后时也不错,但是从一开始就很糟糕。 LinkedList<T>
非常适合您提供迭代器访问,添加/删除开始以及添加/删除结束。这更合适。 (如果你真的想去镇上,你甚至可以编写自己的固定大小的循环缓冲区类型,它封装了你的逻辑;这将给两个世界的最好的,在你不希望能够扩展超过一定的尺寸。)
关于您对Guffa的回答的评论:将输入转换为更适合处理的表单很常见,然后将其转换回原始格式输出。你做这件事的原因正是“更合适”的一点。作为“更新字典”操作的一部分,您不希望为换行符解析字符串。特别是,您听起来像是目前介绍“行”的想法,其中原始文本正在以字符串形式读入。通过使用换行符分隔字符串,您可以有效地创建自己的“集合”类,该字符串由字符串支持。与使用内置集合相比,这种方法效率低下,容易出错,且难以管理。如果你想要的话,很容易在最后执行换行符到换行符分隔的字符串,但听起来你这样做太早了。
相关问题
- 1. C++从字符串中删除字符
- 2. 从c字符串中删除字符
- 3. C从字符串中删除字符
- 4. 从C字符串中删除字符
- 5. 从字符串中删除“
- 6. 从字符串中删除
- 7. 从字符串中删除()
- 8. 从字符串中删除“@”
- 9. 从C中删除字符串C
- 10. 从字符串中删除字符串
- 11. 从字符串中删除字符串
- 12. 从阵列C#中删除字符串
- 13. C++从char中删除子字符串
- 14. 从字符串c中删除单词#
- 15. 从字符串中删除重音C
- 16. 从C中删除字符串#
- 17. 从字典中删除'Counter'python
- 18. 从字典中删除键
- 19. 从字符串中删除字符
- 20. Python:从字符串中删除字符
- 21. 从字符串中删除字符
- 22. datagridview从字符串中删除'&'字符
- 23. jQuery从字符串中删除' - '字符
- 24. Fortran:从字符串中删除字符
- 25. 从字符串中删除Unicode字符
- 26. VB.NET - 从字符串中删除字符
- 27. 从字符串中删除字符?
- 28. Ruby从字符串中删除空行
- 29. 从字符串中删除&字符目标c
- 30. 删除c字符串中的字符
这是不可能的,因为我的程序读取字符串的方式。 – caesay 2009-11-30 06:56:58
@sniperX:为什么呢? – Guffa 2009-11-30 06:59:25
@Guffa:那么,这将是可能的,但最终,id仍然需要将它编译成一个大字符串,以便在我的程序中使用它。所以id基本上就是围绕着一圈。从一个大的字符串到一个字符串列表,再到一个大的字符串,我没有看到这一点? – caesay 2009-11-30 07:05:53