Skip to content

OrderedDataStore

概览

字段
KindData · 数据 Data
Realmserver

继承关系

  • DataStore(10 函数)
    • [OrderedDataStore](1 函数)

继承成员

1 个来源 / 10 函数

有序数据存储集合,用于存储键值对并支持按值排序检索。它继承自 DataStore,额外提供 GetSortedAsync 方法,可按升序或降序分页获取数据。写入的值必须是整数,适合排行榜、分数记录等需要排序的场景。

适用场景

典型场景是实现玩家排行榜,将玩家分数作为值存入 OrderedDataStore,然后通过 GetSortedAsync 按分数降序获取排名列表。

使用要点

通过 DataStoreService:GetOrderedDataStore 获取实例,使用 SetAsync 写入整数键值对,再调用 GetSortedAsync 并指定排序方向与分页大小,返回的 Pages 对象可通过 GetCurrentPage 和 AdvanceToNextPageAsync 遍历结果。

注意事项

OrderedDataStore 不可直接构造,必须由 DataStoreService:GetOrderedDataStore 返回;写入值必须是整数。GetSortedAsync 是异步读操作,应在 Task:Spawn 或协程中调用;返回 OrderedDataStoreKeyValueInfoPages 后通过 GetCurrentPage/AdvanceToNextPageAsync 分页读取。

代码示例

写入分数并按降序读取排行榜

lua
-- @runtime server
local DataStoreService = game:GetService('DataStoreService')
local Task = game:GetService('Task')
local orderedStore = DataStoreService:GetOrderedDataStore('PlayerScore')

Task:Spawn(function()
    orderedStore:SetAsync('player_1001', 1200)
    orderedStore:SetAsync('player_1002', 900)

    local options = DataStoreGetOptions.New()
    local pages = orderedStore:GetSortedAsync(false, 10, nil, nil, options)
    for _, item in ipairs(pages:GetCurrentPage()) do
        print(item.Key, item.Value)
    end
end)

关联类型

函数 (1)

GetSortedAsync

签名:GetSortedAsync(ascending: Bool, pageSize?: Int, minValue?: Int, maxValue?: Int, options?: DataStoreGetOptions) -> OrderedDataStoreKeyValueInfoPages (分页迭代器)

获取有序数据存储中按 value 排序的分页数据。返回一个分页迭代器,可遍历排序后的键值对。

参数类型说明
ascendingBool是否升序
pageSize?Int页大小, 默认 0 (使用服务端默认值)
minValue?Int最小值过滤, 包含
maxValue?Int最大值过滤, 包含
options?DataStoreGetOptions可选参数, 优先级高于 OrderedDataStore 初始化时的 DataStoreOptions, 可通过 DataStoreGetOptions.New() 创建

返回值 OrderedDataStoreKeyValueInfoPages (分页迭代器)

示例代码

按 value 降序读取分页

lua
-- @runtime server
local DataStoreService = game:GetService('DataStoreService')
local Task = game:GetService('Task')
local orderedStore = DataStoreService:GetOrderedDataStore('PlayerScore')

Task:Spawn(function()
    local options = DataStoreGetOptions.New()
    local pages = orderedStore:GetSortedAsync(false, 10, nil, nil, options)
    for _, item in ipairs(pages:GetCurrentPage()) do
        print(item.Key, item.Value)
    end
end)