مرتبسازی صعودی و نزولی در مجموعههای مرتبشده (Sorted Sets) – دستورات ZRANGE و ZREVRANGE
چکیده
در این مقاله، به بررسی نحوهی مرتبسازی خودکار اعضا در مجموعههای مرتبشده (Sorted Sets) بر اساس امتیاز (Score) میپردازیم. با افزودن اعضای جدید به مجموعهی مثال قبلی، مشاهده خواهیم کرد که چگونه دادهها بهصورت پیشفرض بهترتیب صعودی (از کوچک به بزرگ) مرتب میشوند. همچنین با دستور ZREVRANGE آشنا میشویم که امکان بازیابی اعضا بهترتیب نزولی (از بزرگ به کوچک) را فراهم میکند. این قابلیت برای نمایش لیدربوردها، رتبهبندیها، و سیستمهای نمایش دادههای برتر بسیار حیاتی است.
مقدمه
در بخش قبلی، با دستور ZADD برای افزودن اعضا به یک مجموعهی مرتبشده و دستور ZRANGE برای بازیابی آنها آشنا شدیم. یکی از ویژگیهای کلیدی مجموعههای مرتبشده، مرتبسازی خودکار اعضا بر اساس امتیاز است. در این بخش، این ویژگی را بهصورت عملی مشاهده میکنیم و با روش معکوسسازی ترتیب برای نمایش دادهها از بیشترین به کمترین مقدار آشنا میشویم.
افزودن اعضای جدید به مجموعهی مثال
مجموعهی users:followers را که در بخش قبل ایجاد کردیم، در نظر بگیرید:
| Member | Score |
|---|---|
| Adam | 10 |
| Scott | 20 |
| Amy | 30 |
حال دو عضو جدید به این مجموعه اضافه میکنیم:
ZADD users:followers 1 John
ZADD users:followers 100 David
پس از افزودن، مجموعه شامل اعضای زیر خواهد بود:
| Member | Score |
|---|---|
| John | 1 |
| Adam | 10 |
| Scott | 20 |
| Amy | 30 |
| David | 100 |
ترتیب پیشفرض: صعودی (Ascending) با ZRANGE
همانطور که در بخش قبل دیدیم، دستور ZRANGE بهطور پیشفرض اعضا را بر اساس امتیاز بهترتیب صعودی (از کوچک به بزرگ) بازمیگرداند:
ZRANGE users:followers 0 -1 WITHSCORES
خروجی:
1) "John"
2) "1"
3) "Adam"
4) "10"
5) "Scott"
6) "20"
7) "Amy"
8) "30"
9) "David"
10) "100"
همانطور که مشاهده میشود، اعضا بر اساس امتیاز از کمترین (1 برای John) تا بیشترین (100 برای David) مرتب شدهاند.
ترتیب نزولی (Descending) با ZREVRANGE
در بسیاری از کاربردها، مانند نمایش لیدربورد یا لیست کاربران برتر، نیاز داریم که دادهها را بهترتیب نزولی (از بیشترین به کمترین) نمایش دهیم. برای این منظور، از دستور ZREVRANGE استفاده میکنیم که مخفف Reverse Range است.
ساختار این دستور مشابه ZRANGE است:
ZREVRANGE key start stop [WITHSCORES]
مثال: دریافت اعضا بهترتیب نزولی (بدون امتیاز)
ZREVRANGE users:followers 0 -1
خروجی:
1) "David"
2) "Amy"
3) "Scott"
4) "Adam"
5) "John"
مثال: دریافت اعضا بهترتیب نزولی به همراه امتیازها
ZREVRANGE users:followers 0 -1 WITHSCORES
خروجی:
1) "David"
2) "100"
3) "Amy"
4) "30"
5) "Scott"
6) "20"
7) "Adam"
8) "10"
9) "John"
10) "1"
همانطور که مشاهده میشود، این بار اعضا از بیشترین امتیاز (100 برای David) به کمترین امتیاز (1 برای John) مرتب شدهاند.
مقایسهی دو دستور ZRANGE و ZREVRANGE
| ویژگی | ZRANGE | ZREVRANGE |
|---|---|---|
| ترتیب بازگردانی | صعودی (Ascending) – از کوچک به بزرگ | نزولی (Descending) – از بزرگ به کوچک |
| کاربرد اصلی | نمایش دادهها بهترتیب طبیعی | نمایش لیدربورد، رتبهبندی برتر |
| پارامتر WITHSCORES | پشتیبانی میشود | پشتیبانی میشود |
| ساختار | ZRANGE key start stop [WITHSCORES] | ZREVRANGE key start stop [WITHSCORES] |
نکتهی مهم در مورد ترتیب قرارگیری اعضا با امتیازهای برابر
در صورتی که دو یا چند عضو امتیاز یکسانی داشته باشند، ترتیب بازگردانی آنها بر اساس ترتیب واژهنامهای (Lexicographical) اعضا تعیین میشود. برای مثال، اگر دو عضو با امتیاز 10 به نامهای "Alice" و "Bob" داشته باشیم، "Alice" قبل از "Bob" بازگردانده میشود.
جمعبندی
| نیازمندی | دستور پیشنهادی |
|---|---|
| دریافت اعضا از کمترین امتیاز به بیشترین | ZRANGE key 0 -1 [WITHSCORES] |
| دریافت اعضا از بیشترین امتیاز به کمترین | ZREVRANGE key 0 -1 [WITHSCORES] |
| دریافت محدودهی خاص از اعضا (مثلاً ۵ عضو برتر) | ZREVRANGE key 0 4 WITHSCORES (برای دریافت ۵ عضو اول) |
نتیجهگیری
مجموعههای مرتبشده با ارائهی دو دستور ZRANGE و ZREVRANGE، انعطافپذیری کامل در نمایش دادهها بهصورت صعودی یا نزولی را فراهم میکنند. این ویژگی، مجموعههای مرتبشده را به ابزاری ایدهآل برای پیادهسازی سیستمهای رتبهبندی، لیدربوردهای بازیهای آنلاین، لیستهای برترینها در حوزهی مالی و هر سناریوی دیگری که نیاز به نمایش دادهها بر اساس اولویت یا امتیاز دارد، تبدیل میکند. در بخشهای بعدی، با دستورات پیشرفتهتری مانند ZRANGEBYSCORE برای فیلتر کردن بر اساس محدودهی امتیازی و ZINCRBY برای افزایش اتمیک امتیازها آشنا خواهیم شد.