我需要使用一个数据结构来保存列表的最新X元素。一位同事给了我这个解决方案:
int start = 0;
const int latestElementsToKeep = 20;
int[] numbers = new int[latestElementsToKeep];
for (int i = 0; i < 30; i++)
{
numbers[start] = i;
if (start < numbers.Length - 1)
{
start++;
}
else
{
start = 0;
}
}
所以在运行之后,数字数组的数字为19-29(最新的20个数字)。
这很好,但在现实世界中很难使用它。有更简单的方法吗?
答案 0 :(得分:6)
这看起来很标准Circular Buffer。我唯一的建议是为它创建一个类或下载一个可用的库。在Google搜索结果的顶部附近似乎有一些看上去很有希望的东西。
答案 1 :(得分:1)
更容易实现此目的:
int[] numbers = new int[latestElementsToKeep];
for (int i = 0; i < 30; i++)
numbers[i % latestElementsToKeep] = i;
Modulus operator会返回i
除以latestElementsToKeep
的提示。当i
到达latestElementsToKeep
时,您将从头开始。
答案 2 :(得分:0)
对于一系列数字,您可以使用:
int keep = 20;
int lastItem = 29;
int[] numbers = Enumerable.Range(lastItem - keep, keep).ToArray();
要从任何集合中获取最后的项目(您可以获取大小),您可以使用:
int keep = 20;
someType[] items = someCollection.Skip(someCollection.Count() - keep).ToArray();