VBuffer<T> 结构

定义

支持密集和稀疏表示形式的缓冲区。 这是所有 VectorDataViewType 实例的表示类型。 此矢量的显式定义值通过公开,如果不密集,GetIndices()则公开GetValues()

public readonly struct VBuffer<T> : System.Collections.IEnumerable
public readonly struct VBuffer<T>
type VBuffer<'T> = struct
    interface IEnumerable
type VBuffer<'T> = struct
Public Structure VBuffer(Of T)
Implements IEnumerable
Public Structure VBuffer(Of T)

类型参数

T

矢量的类型。 对于这一点,没有编译时限制,但此代码和实际使用 VBuffer<T> 的所有代码都假定赋值足以使值完全独立副本。 因此,例如,这意味着缓冲区的缓冲区是不可能的。 但是,类似 Int32的事情, SingleReadOnlyMemory<T>,是完全好的。

继承
VBuffer<T>
实现

注解

此结构本身是不可变的,但若要启用缓冲区编辑,包括重新使用内部缓冲区,可以通过访问VBuffer<T>可变变体VBufferEditor<T>

在整个代码中,我们假设稀疏VBuffer<T>在逻辑上等效于填充默认值的T密集VBuffer<T>值。

构造函数

名称 说明
VBuffer<T>(Int32, Int32, T[], Int32[])

构造可能稀疏的向量表示形式。

VBuffer<T>(Int32, T[], Int32[])

构造密集表示形式。 数组 indices 通常未指定,但如果指定,则应将其视为要保留的缓冲区,以便可能使用。

字段

名称 说明
Length

缓冲区的逻辑长度。

属性

名称 说明
IsDense

获取一个值,该值指示是否在缓冲区中显式表示每个逻辑元素。

方法

名称 说明
Copy(T[], Int32, VBuffer<T>, Int32)

从源数组的一部分复制到给定的目标。

CopyTo(Span<T>, Int32, T)

从此缓冲区复制到给定的目标范围,从指定的索引开始。 这“假装”。

CopyTo(Span<T>)

从此缓冲区复制到给定的目标范围。 这“假装”。

CopyTo(VBuffer<T>, Int32, Int32)

将此缓冲区中的值范围复制到给定的目标。

CopyTo(VBuffer<T>)

从此缓冲区复制到给定的目标。

CopyToDense(VBuffer<T>)

从此缓冲区复制到给定的目标,强制密集表示形式。

DenseValues()

返回一个可枚举的 Length 项,表示值。

GetEnumerator()

返回一个枚举器,该枚举器循环访问 VBuffer 中的值。

GetIndices()

索引。 对于密集表示形式,不使用此数组,并返回默认的“空”范围。 对于稀疏表示形式,它与从 GetValues() 中返回并指定相应值的逻辑索引并行,以递增顺序,介于 0(含 0 和 Length 独占)之间,对应于所有显式定义的值。 所有未指定索引的值都应被视为使用默认值 T隐式定义。

GetItemOrDefault(Int32, T)

获取存储在此结构中的项。 对于密集矢量,这是一个简单的查找。 对于稀疏向量,它将尝试查找具有该索引的条目,并设置为 destination 该存储值,或者如果未找到此类值,请为其分配默认值。

GetItemOrDefault(Int32)

该变量 GetItemOrDefault(Int32, T) 返回值,而不是使用引用参数将其传递回。

GetValues()

显式表示的值。 当此值 IsDense时, Length 返回的值将相等 Length,否则长度将小于 Length

Items(Boolean)

返回所有索引/值对的联合列表。

ToString()

支持密集和稀疏表示形式的缓冲区。 这是所有 VectorDataViewType 实例的表示类型。 此矢量的显式定义值通过公开,如果不密集,GetIndices()则公开GetValues()

适用于