โครงสร้างข้อมูลแผนที่ที่เรียบเรียงของ ห้องเก็บข้อมูล ช่วยให้คุณสามารถเก็บข้อมูลบ่อยในห้องเก็บข้อมูลเป็นคู่ค่าของคีย์ด้วย
ข้อจํากัด
นอกเหนือจาก ขนาดของโครงสร้างข้อมูล ขนาดแผนที่มีขนาดของกุญแจ 128 ตัวอักษร ขนาดของมูลค่า 32 KB และขนาดของกุญแจแรงดึง 128 ตัวอักษร
หากคุณต้องการเก็บข้อมูลที่เกินขีดจำกัดนี้สำหรับประสบการณ์ของคุณคุณสามารถใช้เทคนิคการแบ่งย่อยเพื่อแบ่งและจัดจำหน่ายพวกเขาผ่าน รหัสไฟล์ ไปยังหลายโครงสร้างข้อมูล
การรับแผนที่ที่เรียบเรียง
เพื่อรับแผนที่ที่เรียบเรียง โทร Class.MemoryStoreService:GetSortedMap() พร้อมกับชื่อ ชื่อของคุณต้องการให้กำหนดสำหรับแผนที่ ชื่ออยู่ในประสบการณ์ดังนั้นคุณจึงสามารถเข้าถึงแผนที่ที่เรียบเ
การรับแผนที่ที่เรียบเรียง
local MemoryStoreService = game:GetService("MemoryStoreService")local sortedMap = MemoryStoreService:GetSortedMap("SortedMap1")
หลังจากที่คุณได้รับแผนที่ที่เรียบร้อยแล้วให้โทรไปยังหนึ่งในตัวอักษรต่อไปนี้เพื่ออ่านหรือเขียนข้อมูลในมัน:
ฟังก์ชัน | การกระทํา |
---|---|
MemoryStoreSortedMap:SetAsync() | เพิ่ม กุญแจใหม่หรือเขียนค่าและ/หรือเรียงลำดับกุญแจถ้ากุญแจมีอยู่แล้ว |
MemoryStoreSortedMap:GetAsync() | อ่าน กุญแจที่เฉพาะ |
MemoryStoreSortedMap:GetRangeAsync() | อ่าน กุญแจที่มีอยู่ทั้งหมดหรือช่วงของกุญแจเฉพาะ |
MemoryStoreSortedMap:UpdateAsync() | อัปเดต มูลค่าของกุญแจและ/หรือเรียงลำดับกุญแจหลังจากดึงมันจากแผนที่ที่เรียงลำดับ |
MemoryStoreSortedMap:RemoveAsync() | ลบ กุญแจจากแผนที่ที่เรียงลำดับ |
การเพิ่มหรือเขียนข้อมูล
เพื่อเพิ่มรหัสใหม่หรือเขียนค่าหรือเรียงลำดับของรหัสในแผนที่ที่เรียงลำดับใหม่ สตริง
ในลำดับการเรียงลำดับของกุญแจของคุณ รหัสการเรียงลำดับจะได้รับความได้เปรียบก่อนหน้ารหัสการเรียงลำดับ เช่น เมื่
ตัวอย่างข้อมูลบางอย่างที่เรียงลำดับตามลำดับเชิงข้อมูล -
{Key: "player1", Value: someValue1, SortKey: -1}{Key: "player2", Value: someValue2, SortKey: 0}{Key: "player4", Value: someValue3, SortKey: 1}{Key: "player5", Value: someValue4, SortKey: 1}{Key: "player3", Value: someValue5, SortKey: 3.14}{Key: "player6", Value: someValue6, SortKey: "someString"}{Key: "player0", Value: someValue7}{Key: "player7", Value: someValue8}
หมายเหตุวิธีที่ player0 เรียงลำดับหลังจากกุญแจทั้งหมดด้วยกุญแจเรียงลำดับ player6 คีย์
การเพิ่มข้อมูลในแผนที่ที่เรียงลำดับ
local MemoryStoreService = game:GetService("MemoryStoreService")
local sortedMap = MemoryStoreService:GetSortedMap("SortedMap1")
local setSuccess, _ = pcall(function()
return sortedMap:SetAsync("User_1234", 1000, 30, 3.14152)
end)
if setSuccess then
print("Set succeeded.")
end
รับข้อมูล
คุณสามารถรับค่าข้อมูลและเรียงลำดับกุญแจที่เกี่ยวข้องกับกุญแจที่กำหนดหรือรับค่าข้อมูลหลายรายการและเรียงลำดับกุญแจสำหรับกุญแจในช่วง
รับข้อมูลด้วยกุญแจหนึ่ง
เพื่อรับค่าและเรียงลำดับกุญแจที่เกี่ยวข้องกับกุญแจหนึ่งจากแผนที่ที่เรียงลำดับ, โทร MemoryStoreSortedMap:GetAsync() ด้วยกุญแจ ชื่อ .
รับรหัสปาร์ติเคิลจากแผนที่ที่เรียงลำดับ
local MemoryStoreService = game:GetService("MemoryStoreService")
local sortedMap = MemoryStoreService:GetSortedMap("SortedMap1")
local setSuccess, _ = pcall(function()
return sortedMap:SetAsync("User_1234", 1000, 30, 3.14152)
end)
if setSuccess then
print("Set succeeded.")
end
local item
local getSuccess, getError = pcall(function()
item = sortedMap:GetAsync("User_1234")
end)
if getSuccess then
print(item)
else
warn(getError)
end
รับข้อมูลด้วยหลายคีย์
เพื่อรับข้อมูลสำหรับหลายคีย์จากแผนที่เรียงลำดับเป็นการดำเนินการเด
รับระยะกุญแจจากแผนที่ที่เรียบเรียง
local MemoryStoreService = game:GetService("MemoryStoreService")
local sortedMap = MemoryStoreService:GetSortedMap("SortedMap1")
local lowerBound = {}
lowerBound["key"] = "10"
lowerBound["sortKey"] = 100
local upperBound = {}
upperBound["key"] = "50"
upperBound["sortKey"] = 500
-- รับไอเท็มได้มากถึง 20 รายการตั้งแต่ต้น
local getSuccess, items = pcall(function()
return sortedMap:GetRangeAsync(
Enum.SortDirection.Ascending, 20, lowerBound, upperBound)
end)
if getSuccess then
for _, item in items do
print(item.key)
print(item.sortKey)
end
end
การปรับปรุงข้อมูล
เพื่อดึงค่าและเรียงลำดับของกุญแจจากแผนที่เรียงลำดับและปรับปรุงมันด้วย MemoryStoreSortedMap:UpdateAsync() ด้วยกุญแจ ชื่อ และ ความ
สำหรับประสบการณ์ส่วนใหญ่ หลายเซิร์ฟเวอร์สามารถอัปเดตเครื่องมือเดียวกันได้หลายรายการและเปลี่ยนค่า เมื่อใดก็ตามที่ UpdateAsync() จะเปลี่ยนแป้นที่ล่าสุดก่อน
เช่นเดียวกับตัวอย่างรหัสต่อไปนี้ การปรับปรุงคะแนนในตารางจัดอันดับสำหรับผู้เล่นในเกม คะแนนจะถูกคำนวณเป็นการฆ่า / การเสียชีวิต Class
การปรับปรุงคะแนนลีดเดอร์บอร์ดสำหรับผู้เล่นในแผนที่เรียงลำดับ
local MemoryStoreService = game:GetService("MemoryStoreService")
local sortedMap = MemoryStoreService:GetSortedMap("Leaderboard")
local function updateLeaderboard(itemKey, killsToAdd, deathsToAdd)
local success, newStats, newScore = pcall(function()
return sortedMap:UpdateAsync(itemKey, function(playerStats, playerScore)
playerStats = playerStats or { kills = 0, deaths = 0 }
playerStats.kills += killsToAdd
playerStats.deaths += deathsToAdd
if playerStats then
-- `playerScore` คือตัวแปรที่ใช้ในการเรียงลำดับรายการในแผนที่
playerScore = playerStats.kills / math.max(playerStats.deaths, 1)
return playerStats, playerScore
end
return nil
end, 30)
end)
if success then
print(newStats)
print(newScore)
end
end
ความแลคสำหรับ UpdateAsync() คล้ายกับ GetAsync() และ SetAsync() ยกเว้นจะมีการระบุ
เมื่อเกิดความคุ้มครอง ระบบจะทำงานอีกครั้งจนกว่าจะเกิดสิ่งหนึ่งในสามนี้: การดำเนินการสำเร็จ การโทรกลับฟังก์ชันกลับไปยัง nil หรือสูงสุดจำนวนการโทรกลับถึงจุดสูงสุด หากระบบเข้าถึงจุด
การลบข้อมูล
คุณสามารถใช้ MemoryStoreSortedMap:RemoveAsync() สำหรับทั้งสองการลบหนึ่งคีย์ออกจากแผนที่เรียงลำดับและลบข้อมูลทั้งหมดในหน่วยความจำเรียงลำดับ
การลบกุญแจ
เพื่อลบรหัสออกจากแผนที่เรียงลำดับให้โทร MemoryStoreSortedMap:RemoveAsync() ด้วยรหัส *ชื่อ * * ของรหัส
ลบรหัสจากแผนที่ที่เรียงลำดับ
local MemoryStoreService = game:GetService("MemoryStoreService")
local sortedMap = MemoryStoreService:GetSortedMap("SortedMap1")
local setSuccess, _ = pcall(function()
return sortedMap:SetAsync("User_1234", 1000, 30, "someStringSortKey")
end)
if setSuccess then
print("Set succeeded.")
end
local removeSuccess, removeError = pcall(function()
sortedMap:RemoveAsync("User_1234")
end)
if not removeSuccess then
warn(removeError)
end
การลบข้อมูลทั้งหมด
เพื่อลบหน่วยความจำในแผนที่ที่เรียงลำดับให้ รายการทุกรหัสของคุณด้วย MemoryStoreSortedMap:GetRangeAsync() แล้วลบออกด้วย MemoryStoreSortedMap:RemoveAsync()
ลบหน่วยความจำในแผนที่ที่เรียงลำดับ
local MemoryStoreService = game:GetService("MemoryStoreService")
local sortedMap = MemoryStoreService:GetSortedMap("SortedMap1")
-- เริ่มต้นด้านล่างของ nil ไอเท็ม
local exclusiveLowerBound = nil
while true do
-- รวบรวมไอเท็มได้ถึงหนึ่งร้อยรายการจากขีดจำกัดด้านล่าง
local getRangeSuccess, items = pcall(function()
return sortedMap:GetRangeAsync(Enum.SortDirection.Ascending, 100, exclusiveLowerBound)
end)
if getRangeSuccess then
local removeSuccess = true
local removeError = nil
for _, item in items do
removeSuccess, removeError = pcall(function()
sortedMap:RemoveAsync(item.key)
end)
end
-- หากมีข้อผิดพลาดในการลบรายการ ลองอีกครั้งด้วยขีดจำกัดด้านล่างเดียวกัน
if not removeSuccess then
warn(removeError)
-- หากระยะน้อยกว่าหนึ่งร้อยรายการจะถึงตอนท้ายของแผนที่
elseif #items < 100 then
break
else
-- รหัสที่ดึงมาล่าสุดคือขีดจำกัดด้านล่างสุดสำหรับไตรรงส์ต่อไป
exclusiveLowerBound = {}
exclusiveLowerBound["key"] = items[#items].key
exclusiveLowerBound["sortKey"] = items[#items].sortKey
end
end
end