簡體   English   中英

如何始終保留集合的n個元素?

[英]How to always keep n elements of a collection?

在c#中保存集合的n個元素的最佳方法是什么?

添加新元素時刪除舊元素。

保留集合的n個元素

這就是我做的:

List<int> listOf5Elements = new List<int>();
for(var i = 0; i<200; i++)
{
    listOf5Elements.Add(i);
    if (listOf5Elements.Count() == 6)
        listOf5Elements.RemoveAt(0);
}

LinkedList<int> linkedOf5elements = new LinkedList<int>();
for (var i = 0; i < 200; i++)
{
    linkedOf5elements.AddLast(i);
    if (linkedOf5elements.Count() == 6)
        linkedOf5elements.RemoveFirst();
}

Queue<int> queueOf5Elements = new Queue<int>();
for (var i = 0; i < 200; i++)
{
    queueOf5Elements.Enqueue(i);
    if (queueOf5Elements.Count() == 6)
        queueOf5Elements.Dequeue();
}

還有其他辦法嗎?

你想要的是一個循環緩沖區 那里有很多實現。 這是一個

它在時間和空間上都很有效; 及時,因為插入是O(1)並且在空間中,因為新元素會覆蓋最舊的就地。

你的第一次嘗試效率不高,因為RemoveAt(0)O(n)因為元素必須移位。

第二個也不錯,但在分配新插槽和刪除舊插槽方面有一些開銷。

第三次嘗試是最好的,因為.NET隊列強制作為循環緩沖區,但是有一些處理調整大小的開銷。 由於您不關心調整大小,因此具有固定大小的真正循環緩沖區會更有效。

暫無
暫無

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

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