如何知道列表是不是已满

Posted

技术标签:

【中文标题】如何知道列表是不是已满【英文标题】:How To Know If List is Full如何知道列表是否已满 【发布时间】:2021-06-22 21:11:51 【问题描述】:

我创建了一个固定大小的List

private List<ushort> responseData = new List<ushort>(7);

项目已添加到反应性可观察对象上,但我想知道每个订阅是否已满。

目前已被检查

if (responseData.Count == 7)

由于 responseData 的大小是动态的,我不会在 List 的初始化和检查它是否已满时使用静态的 7。但是,我只是想知道我是否已经设置了 responseData 大小;不再次使用尺寸参考就不能检查吗?

我非常重视任何回应。

【问题讨论】:

您在寻找responseData.Count == responseData.Capacity吗? 嗯,7 只是初始大小。除此之外,基础数据结构将被扩展以处理新项目。似乎您想要一个具有最大大小的列表。如果是这样,您需要提供有关您计划如何使用它的更多信息。 您可以为 List 实现一个名为 IsFull() 的扩展方法,并且 List 的任何实例都可以访问此扩展方法...此文档可能会有所帮助:@987654321 @ 现在我不确定您到底在寻找什么。您始终可以编写一个名为IsFull 的扩展方法,最终检查responseData.Count == responseData.Capacity。您能否准确地定义“已满”的含义以及“更可靠或更智能的方法”的含义(即当前的方法如何不可靠、不智能)? 一个列表不可能是满的。它可以存储无限数量的项目。如果您想使用具有固定容量但实际上会被填满的数据结构,则需要使用不同的数据结构(可能是由 List 支持的数据结构,但这实际上以某种方式防止自身超出容量)和可以有成员来指示它是否已满,或者任何其他对具有容量的集合有意义的操作。 【参考方案1】:

如果我理解正确,您可能会想到List&lt;T&gt;.Capacity 属性?

当您初始化列表时,您可以指定内部容量,它表示在需要调整大小之前可以添加到列表中的项目数。列表容量的默认值为 4 [曾经是,需要确认它仍然是]。

所以,如果您这样创建一个新列表:

var myList = new List<int>(100);

您可以创建一个扩展方法来为您添加和检查:

public static class ListExtension

    public static bool Add<T> ( this List<T> list, T item, out bool isFull )
    
        isFull = false;
        if ( list.Count == list.Capacity )
        
            isFull = true;
            return false;
        

        list.Add ( item );
        isFull = list.Count == list.Capacity;
        return true;
    

现在,这在 Microsoft docs 中有说明:

Capacity 总是大于或等于 Count。如果计数超过 容量增加元素,容量增加 在复制旧数组之前自动重新分配内部数组 元素并添加新元素。

因此,扩展方法应该只允许您将项目添加到初始Capacity,而不能再添加。像这样使用时,var success = myList.Add(item, out var isFull)isFull 会指示列表是否已满。返回值将指示操作是否成功。

【讨论】:

我明白了,我想我的问题是不可能的,我了解到我们将不得不使用== 操作数。但是检查这个属性回答了我的问题,因为我们不必再次使用7 或变量。此外,它更安全。

以上是关于如何知道列表是不是已满的主要内容,如果未能解决你的问题,请参考以下文章

如何在不发送任何内容的情况下检查频道是不是已满[重复]

如何使用 itertools 继续使用列表中的值直到矩阵的对角线已满

Kubernetes:当持久卷已满 80% 时,我如何发送电子邮件?

Oracle pl/sql forall:如何计算表空间已满(1654)错误的实际插入行数

如果管道已满,写入管道的进程是不是会阻塞?

如何在 Git GUI 中显示更多“最近的存储库”?