【发布时间】:2014-06-22 18:28:24
【问题描述】:
我有一个每 X 秒更新一次的列表。 我想每 X 秒知道一个新项目是否已添加到列表中,以及这些项目是什么。
例如我在列表中:
index 0 : this is a test
Index 1 : this is number one
然后在 X 秒后添加了一个新项目:
index 0 : this is a test
Index 1 : this is number one
Index 2 : Im a new item
我想要做的是检查任何新项目,它可以是 X 秒后的一个项目或 20 个项目,并且所有这些项目都应该添加到列表的顶部。所以每次最后一个项目都会是第一个。 如果只添加了一个项目,如果添加了 20 个项目,他将是第一个,那么第 20 个项目将是列表中的第一个,20 个项目中的第 1 个将位于第 20 个。
我以前问过,但现在我知道我需要什么了。
而且仅仅做 inser(0,...) 是不好的。
newText.Add(t[i]);
newText.Add(dateTime[i]);
newText.Add(string.Empty);
如果我在做 newText.Insert(0,t[i]);它以后不会显示任何东西。 如果我使用 Insert 属性,它不会像我想要的那样构建列表,它会在最后添加所有日期和时间以及空行......
这就是我没有使用 Insert 的原因。
编辑
我忘了说我需要保持 List 格式:
newText.Add(t[i]);
newText.Add(dateTime[i]);
newText.Add(string.Empty);
当我指最后一项时,我指的是最后 3 个索引。 List 中的每 3 个索引就像一个组/块。 List 格式是这样的:
索引 0 文本:你好世界 索引 1 日期和时间:22/6/2014 索引 2 空格/空行:
所以当我的意思是移动到列表顶部的最后一项时,我的意思是,例如索引 28 将位于索引 0,然后索引 29 位于索引 1,索引 30 位于索引 2。 由于在索引 28 中我有一个文本索引 29 日期和时间和索引 30 空行。
这是列表的样子:
【问题讨论】:
-
如果您希望最后添加的项目在前,请考虑使用
Stack<T>而不是List<T> -
您可以构建自己的列表结构来提供事件或重载现有的。
-
BindingList
和 ObservableCollection 都有事件让你知道列表何时发生变化 -
如果它必须是一个列表,您可以将 list.Length 的结果保存为一个整数,并在 20 秒后检查 list.Length 是否仍然等于该整数。如果不是,则从 .Length 值中减去整数值。由于保证 List 是有序的,因此最新的项目将始终排在最后。
-
抱歉更新了我的问题。忘记了最重要的是保持列表格式,当我的意思是最后一个项目时,我的意思是最后 3 个索引(项目/块/组都相互连接)。所以他们都需要向上移动。每次添加一个新项目(3 个索引)时,它们都需要像我在问题编辑部分中解释的那样位于顶部。