如何知道列表是不是已满
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 只是初始大小。除此之外,基础数据结构将被扩展以处理新项目。似乎您想要一个具有最大大小的列表。如果是这样,您需要提供有关您计划如何使用它的更多信息。
您可以为 ListIsFull
的扩展方法,最终检查responseData.Count == responseData.Capacity
。您能否准确地定义“已满”的含义以及“更可靠或更智能的方法”的含义(即当前的方法如何不可靠、不智能)?
一个列表不可能是满的。它可以存储无限数量的项目。如果您想使用具有固定容量但实际上会被填满的数据结构,则需要使用不同的数据结构(可能是由 List 支持的数据结构,但这实际上以某种方式防止自身超出容量)和可以有成员来指示它是否已满,或者任何其他对具有容量的集合有意义的操作。
【参考方案1】:
如果我理解正确,您可能会想到List<T>.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% 时,我如何发送电子邮件?