SkipTableBase<TValue> 类
抽象的跳表基类,提供跳表的基本功能和操作。
继承成员
命名空间: Fantasy.DataStructure.SkipTable
程序集: Fantasy.Net.dll
语法
public abstract class SkipTableBase<TValue> : IEnumerable<SkipTableNode<TValue>>, IEnumerable
类型参数
名称 | 描述 |
---|---|
TValue | 跳表中存储的值的类型。 |
构造函数
| 编辑本文 查看源代码SkipTableBase(int)
初始化一个新的跳表实例。
声明
protected SkipTableBase(int maxLayer = 8)
参数
类型 | 名称 | 描述 |
---|---|---|
int | maxLayer | 跳表的最大层数,默认为 8。 |
字段
| 编辑本文 查看源代码AntiFindStack
用于辅助反向查找的栈
声明
protected readonly Stack<SkipTableNode<TValue>> AntiFindStack
字段值
类型 | 描述 |
---|---|
Stack<SkipTableNode<TValue>> |
BottomHeader
跳表的底部头节点
声明
public SkipTableNode<TValue> BottomHeader
字段值
类型 | 描述 |
---|---|
SkipTableNode<TValue> |
MaxLayer
跳表的最大层数
声明
public readonly int MaxLayer
字段值
类型 | 描述 |
---|---|
int |
Node
存储跳表节点的字典
声明
protected readonly Dictionary<long, SkipTableNode<TValue>> Node
字段值
类型 | 描述 |
---|---|
Dictionary<long, SkipTableNode<TValue>> |
Random
用于生成随机数的随机数生成器
声明
protected readonly Random Random
字段值
类型 | 描述 |
---|---|
Random |
TopHeader
跳表的顶部头节点
声明
public readonly SkipTableNode<TValue> TopHeader
字段值
类型 | 描述 |
---|---|
SkipTableNode<TValue> |
属性
| 编辑本文 查看源代码Count
跳表中节点的数量,使用了 Node 字典的计数
声明
public int Count { get; }
属性值
类型 | 描述 |
---|---|
int |
this[long]
获取指定键的节点的值,若不存在则返回默认值。
声明
public TValue this[long key] { get; }
参数
类型 | 名称 | 描述 |
---|---|---|
long | key | 要查找的键。 |
属性值
类型 | 描述 |
---|---|
TValue |
方法
| 编辑本文 查看源代码Add(long, long, long, TValue)
向跳表中添加节点。
声明
public abstract void Add(long sortKey, long viceKey, long key, TValue value)
参数
类型 | 名称 | 描述 |
---|---|---|
long | sortKey | 节点的排序键。 |
long | viceKey | 节点的副键。 |
long | key | 节点的键。 |
TValue | value | 节点的值。 |
AntiFind(int, int, ListPool<SkipTableNode<TValue>>)
在跳表中进行反向查找节点,返回从结束位置到起始位置的节点列表。
声明
public void AntiFind(int start, int end, ListPool<SkipTableNode<TValue>> list)
参数
类型 | 名称 | 描述 |
---|---|---|
int | start | 结束位置的排名。 |
int | end | 起始位置的排名。 |
ListPool<SkipTableNode<TValue>> | list | 用于存储节点列表的 ListPool<T> 实例。 |
Find(int, int, ListPool<SkipTableNode<TValue>>)
在跳表中查找节点,返回从起始位置到结束位置的节点列表。
声明
public void Find(int start, int end, ListPool<SkipTableNode<TValue>> list)
参数
类型 | 名称 | 描述 |
---|---|---|
int | start | 起始位置的排名。 |
int | end | 结束位置的排名。 |
ListPool<SkipTableNode<TValue>> | list | 用于存储节点列表的 ListPool<T> 实例。 |
GetAntiRanking(long)
获取指定键的反向排名,即在比该键更大的节点中的排名。
声明
public int GetAntiRanking(long key)
参数
类型 | 名称 | 描述 |
---|---|---|
long | key | 要查找的键。 |
返回
类型 | 描述 |
---|---|
int | 反向排名。 |
GetEnumerator()
返回一个枚举器,用于遍历跳表中的节点。
声明
public IEnumerator<SkipTableNode<TValue>> GetEnumerator()
返回
类型 | 描述 |
---|---|
IEnumerator<SkipTableNode<TValue>> | 一个可用于遍历跳表节点的枚举器。 |
GetLastValue()
获取跳表中最后一个节点的值。
声明
public TValue GetLastValue()
返回
类型 | 描述 |
---|---|
TValue | 最后一个节点的值。 |
GetRanking(long)
获取指定键的节点在跳表中的排名。
声明
public int GetRanking(long key)
参数
类型 | 名称 | 描述 |
---|---|---|
long | key | 要查找的键。 |
返回
类型 | 描述 |
---|---|
int | 节点的排名。 |
Remove(long)
移除跳表中指定键的节点。
声明
public bool Remove(long key)
参数
类型 | 名称 | 描述 |
---|---|---|
long | key | 要移除的节点的键。 |
返回
类型 | 描述 |
---|---|
bool | 移除是否成功。 |
Remove(long, long, long, out TValue)
从跳表中移除指定键的节点。
声明
public abstract bool Remove(long sortKey, long viceKey, long key, out TValue value)
参数
类型 | 名称 | 描述 |
---|---|---|
long | sortKey | 节点的排序键。 |
long | viceKey | 节点的副键。 |
long | key | 节点的键。 |
TValue | value | 被移除的节点的值。 |
返回
类型 | 描述 |
---|---|
bool | 移除是否成功。 |
TryGetNodeByKey(long, out SkipTableNode<TValue>)
尝试通过键获取节点。
声明
public bool TryGetNodeByKey(long key, out SkipTableNode<TValue> node)
参数
类型 | 名称 | 描述 |
---|---|---|
long | key | 要查找的键。 |
SkipTableNode<TValue> | node | 获取到的节点,如果键不存在则为 |
返回
类型 | 描述 |
---|---|
bool | 是否成功获取节点。 |
TryGetValueByKey(long, out TValue)
尝试通过键获取节点的值。
声明
public bool TryGetValueByKey(long key, out TValue value)
参数
类型 | 名称 | 描述 |
---|---|---|
long | key | 要查找的键。 |
TValue | value | 获取到的节点的值,如果键不存在则为默认值。 |
返回
类型 | 描述 |
---|---|
bool | 是否成功获取节点的值。 |