【问题标题】:C# - How to create fixed size SortedList?C# - 如何创建固定大小的 SortedList?
【发布时间】:2018-08-22 11:22:31
【问题描述】:

我只发现 SortedList 包含 IsFixedSize 属性,但我在任何地方都找不到这个简单问题的答案。

【问题讨论】:

  • 从这里开始:How to Ask
  • 嗨。你能解释一下为什么你需要创建一个固定大小的排序列表吗?也许如果您解释为什么需要这样做,我们可以建议可能实现您的最终目标的替代解决方案。
  • 固定大小->数组
  • @LasseVågsætherKarlsen 我需要它作为我游戏中的设备,库存容量有限。我知道我可以检查 Count 属性,但我只是想知道是否有内置方法可以做到这一点。

标签: c# collections sortedlist


【解决方案1】:

这个属性是从IDictionary 继承的,因为SortedList 实现了它。对于SortedList (as stated in the msdn documentation) 的默认实现,此属性将始终返回false,因为默认实现不是固定大小。

固定大小意味着集合在构造通过包装器(同样,the docs)。所以如果你想要一个固定大小的SortedList,你应该创建自己的包装器,比如

public class SortedListFixed<TKey, TValue> : SortedList<TKey, TValue>
{
    private SortedList<TKey, TValue> _list;

    public bool IsFixedSize => true;

    /** ctors **/

    public void Add(TKey key, TValue value) => 
        throw InvalidOperationException("This collection is fixed size");

    public bool Remove (TKey key) =>
        throw InvalidOperationException("This collection is fixed size");

    /** etc. for all inherited size-modifying methods **/
}

两个 ctor 会派上用场,一个采用容量,创建具有该容量的底层 _list,另一个包装 ctor 采用现有的 SortedList 作为参数。您还可以将后者与一个简洁的扩展方法结合起来,如下所示:

public static class SortedListExtensions
{
    public static SortedListFixed<TKey, TValue> ToFixedSize<TKey, TValue>(
        this SortedList<TKey, TValue> list) => new SortedListFixed<TKey, TValue>(list);

}

请注意,这与其说是一个完整的实现,不如说是一个指导方针。

【讨论】:

  • 我猜TrimToSize也是如此?
  • @Tom TrimToSize 也属于“尺寸修改方法”。
猜你喜欢
  • 2019-10-13
  • 1970-01-01
  • 2011-12-05
  • 2011-01-09
  • 1970-01-01
  • 2017-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多