از کلاس BitArray در NET 7 برای انجام عملیات بیتی روی داده های خود برای بهبود عملکرد استفاده کنید.
کلاس BitArray در NET 7 یک ساختار داده قوی است که بیت های داده را ذخیره و دستکاری می کند. هر عنصر در BitArray فقط می تواند یک بیت (۰ یا ۱) را که به صورت false یا true نمایش داده می شود، نگه دارد، جایی که false نشان دهنده خاموش بودن بیت (۰) و true نشان دهنده روشن بودن بیت (۱) است. BitArrays می تواند پرچم ها را ذخیره کند یا به طور موثر عملیات بیتی را روی داده ها انجام دهد.
این مقاله در مورد استفاده از BitArray در سی شارپ با نمونههای کد مربوطه در هر کجا که قابل اجرا باشد صحبت میکند. برای کار با نمونه کدهای ارائه شده در این مقاله، باید Visual Studio 2022 را در سیستم خود نصب کنید. اگر قبلاً نسخهای ندارید، میتوانید Visual Studio 2022 را از اینجا بارگیری کنید.
یک پروژه برنامه کاربردی کنسول در ویژوال استودیو ایجاد کنید
ابتدا، اجازه دهید یک پروژه برنامه کاربردی کنسول NET Core در ویژوال استودیو ایجاد کنیم. با فرض اینکه Visual Studio 2022 در سیستم شما نصب شده است، مراحل ذکر شده در زیر را برای ایجاد یک پروژه جدید .NET Core Console Application در Visual Studio دنبال کنید.
- Visual Studio IDE را راه اندازی کنید.
- روی “ایجاد پروژه جدید” کلیک کنید.
- در پنجره “ایجاد پروژه جدید”، “Console App (.NET Core)” را از لیست الگوهای نمایش داده شده انتخاب کنید.
- بعدی را کلیک کنید.
- در پنجره “پیکربندی پروژه جدید خود” که در ادامه نشان داده شده است، نام و مکان پروژه جدید را مشخص کنید.
- بعدی را کلیک کنید
- در پنجره «اطلاعات اضافی» که در ادامه نشان داده شده است، «NET 7 (پیشنمایش)» را بهعنوان نسخه چارچوبی که میخواهید استفاده کنید، انتخاب کنید.
- روی ایجاد کلیک کنید.
ما از این پروژه برنامه کاربردی کنسول NET 7 برای کار با BitArray در بخشهای بعدی این مقاله استفاده خواهیم کرد.
BitArray چیست؟
BitArray نوعی موجود در فضای نام System.Collections است که آرایه فشرده ای از مقادیر بیت را نشان می دهد. این مقادیر به صورت مقادیر بولی، یعنی درست و نادرست بیان می شوند. در اینجا مقدار true به معنای روشن بودن بیت و مقدار false به معنای خاموش بودن بیت است.
از آنجا که کلاس BitArray در فضای نام System.Collections قرار دارد، باید یک دستورالعمل استفاده برای آن فضای نام در کد خود قرار دهید. کلاس BitArray در فضای نام System.Collections مطابق شکل زیر اعلان می شود.
public sealed class BitArray : ICloneable, System.Collections.ICollection
یک BitArray در NET 7 ایجاد کنید
می توانید یک BitArray با اندازه معین ایجاد کنید و آن را با تمام مقادیر نادرست پر کنید، همانطور که در قطعه کد زیر نشان داده شده است.
var bitArray = new BitArray(10);
همچنین میتوانید فهرستی از بولیها را برای ایجاد یک BitArray با اندازه خاص و تنظیم مقادیر ارسال کنید.
var bitArray = new BitArray(new bool[] {true, false, true});
هنگامی که BitArray خود را ایجاد کردید، می توانید با استفاده از نمایه ساز به تک تک بیت ها دسترسی داشته باشید و آنها را دستکاری کنید. نمایه ساز انتظار یک عدد صحیح را دارد و مقدار آن بیت را برمی گرداند یا تنظیم می کند.
bitArray[0] = true //sets the first bit to true
bitArray[1] = false //sets the second bit to false
bitArray[0] //returns the value of the first bit (as a bool)
قطعه کد زیر را می توان برای ایجاد یک BitArray، تنظیم مقادیر برای عناصر آن، و سپس بازیابی و نمایش مقدار یک شاخص خاص در BitArray استفاده کرد.
BitArray bitArray = new BitArray(5);
bitArray[0] = true;
bitArray[1] = false;
bitArray[2] = true;
bitArray[3] = false;
bitArray[4] = false;
Console.WriteLine(bitArray.Get(2));
Console.WriteLine(bitArray.Get(4));
هنگامی که کد بالا را اجرا می کنید، مقادیر true و false همانطور که در شکل ۱ نشان داده شده است در پنجره کنسول نمایش داده می شود.
شکل ۱.
دستکاری بیت ها در BitArray
میتوانید بیتهای موجود در BitArray را با استفاده از فهرست آن یا با استفاده از متدهای Get and Set کلاس BitArray دستکاری کنید. برای تنظیم یا بازیابی چند بیت از یک BitArray، میتوانید از روشهای SetAll() و GetAll() همانطور که در قطعه کد زیر نشان داده شده است استفاده کنید.
bitArray.SetAll(false); //set all bits of the bit array to 0
bitArray.Set(0, true); //set first bit of the bit array to 1
bitArray.Set(1, false); //set the second bit of the bit array to 0
bool result = (bitArray[0] == 1); //verify if first bit is equal to 1
بررسی کنید آیا BitArray فقط خواندنی است
اگر باید بررسی کنید که آیا BitArray فقط ReadOnly است، می توانید از ویژگی IsReadOnly استفاده کنید. این ویژگی یک مقدار Boolean برمی گرداند که نشان می دهد آیا BitArray فقط خواندنی است یا خیر. قطعه کد زیر نشان می دهد که چگونه می توانید بررسی کنید که آیا BitArray فقط خواندنی است یا خیر.
BitArray bitArray = new BitArray(new byte[] { 0, 1, 0, 1, 0 });
Console.WriteLine(bitArray.IsReadOnly);
هنگامی که کد بالا را اجرا می کنید، متن “False” در پنجره کنسول نمایش داده می شود.
ویژگی های طول و تعداد در BitArray
ویژگی Length یک BitArray تعداد بیت های آرایه را برمی گرداند. ویژگی Count تعداد مقادیر درست و نادرست را در BitArray برمیگرداند. توجه داشته باشید که ویژگی Length همیشه تعداد کل بیت های آرایه را برمی گرداند، حتی اگر همه آنها نادرست باشند. به عبارت دیگر، ویژگیهای Length و Count مقادیر یکسانی را برای BitArray نشان میدهند.
بخش کد زیر نشان میدهد که چگونه میتوانید طول و تعداد BitArray را دریافت کنید.
var bitArray = new BitArray(new bool[] { true, false, true, false });
Console.WriteLine("Length: " + bitArray.Length);
Console.WriteLine("Count: " + bitArray.Count);
هنگامی که کد بالا را اجرا می کنید، خروجی مشابه آنچه در شکل ۲ نشان داده شده است.
شکل ۲.
شاید بخواهید بررسی کنید که آیا نمونه BitArray شما همگام شده است یا خیر. این کار را می توان با فراخوانی ویژگی IsSynchronized نمونه انجام داد، که اگر BitArray همگام باشد، مقدار true و در غیر این صورت false برمی گردد.
عملیات AND، OR و NOT را در BitArray انجام دهید
لیست کد زیر نشان میدهد که چگونه میتوانید عملیات AND را در دو نمونه BitArray انجام دهید. یک عمل بیتی AND اگر هر دو عملوند درست باشد true (یا ۱) را برمی گرداند و در غیر این صورت false را برمی گرداند. اگر هر یک یا هر دو عملوند درست باشد، عملیات OR مقدار true را برمیگرداند و در غیر این صورت false.
var bitArray1 = new BitArray(new bool[] { true, false, true, false, true });
var bitArray2 = new BitArray(new bool[] { true, false, true, true, true });
bitArray1.Set(0, true);
bitArray1.Set(1, false);
bitArray1.Set(2, true);
bitArray1.Set(3, true);
bitArray1.Set(4, false);
bitArray2.Set(0, true);
bitArray2.Set(1, true);
bitArray2.Set(2, false);
bitArray2.Set(3, true);
bitArray2.Set(4, false);
bitArray1.And(bitArray2);
Console.WriteLine("Displaying the elements of bitArray1 after AND operation");
for (int i = 0; i < bitArray1.Count; i++)
{
Console.Write(bitArray1[i] + "\t");
}
هنگامی که کد بالا را اجرا می کنید، مقدار هر عنصر bitArray1 پس از عملیات AND نمایش داده می شود.
شکل ۳.
برای انجام عملیات OR در دو بیت آرایه، به سادگی می توانید عملگر AND را با عملگر OR در مثال قبل جایگزین کنید. به عبارت دیگر، bitArray1.And(bitArray2) را با bitArray1.Or(bitArray2) جایگزین کنید.
var bitArray1 = new BitArray(new bool[] { true, false, true, false, true });
var bitArray2 = new BitArray(new bool[] { true, false, true, true, true });
bitArray1.Set(0, true);
bitArray1.Set(1, false);
bitArray1.Set(2, true);
bitArray1.Set(3, true);
bitArray1.Set(4, false);
bitArray2.Set(0, true);
bitArray2.Set(1, true);
bitArray2.Set(2, false);
bitArray2.Set(3, true);
bitArray2.Set(4, false);
bitArray1.Or(bitArray2);
Console.WriteLine("Displaying the elements of bitArray1 after OR operation");
for (int i = 0; i < bitArray1.Count; i++)
{
Console.Write(bitArray1[i] + "\t");
}
انجام یک عملیات NOT در BitArray همه عناصر true را به false و بالعکس تغییر می دهد. قطعه کد زیر عناصر bitArray1 را از { true, false, false, true, false } به { false, true, true, false, true } تغییر می دهد.
bitArray1.Not();
کاربردهای رایج برای BitArrays
تعدادی از موارد استفاده رایج برای BitArray وجود دارد، مانند انجام عملیات بیتی برای دستکاری یک تصویر. رنگ هر پیکسل در یک تصویر با تعداد معینی بیت مشخص می شود. تغییر رنگ پیکسل مستلزم دستکاری بیت های تشکیل دهنده آن است. با استفاده از BitArray، به راحتی می توان بیت های جداگانه را در یک آرایه دستکاری کرد.
BitArray معمولاً هنگام برخورد با بسته های شبکه نیز استفاده می شود. بسته ها حاوی مقدار زیادی داده هستند که بسته به پروتکل ممکن است به صورت بیت یا بایت قالب بندی شوند. شما می توانید به راحتی بیت های موجود در هر بسته را با BitArray استخراج و دستکاری کنید.
همچنین می توانید از BitArray برای نمایش مقادیر بولی در برنامه خود استفاده کنید. با انجام این کار، می توانید حافظه و حافظه مورد نیاز خود را کاهش دهید. BitArray یک هشتم فضای مصرف شده توسط bool را مصرف می کند زیرا BitArray فقط یک بیت را برای هر مقدار ذخیره می کند. علاوه بر این، در حالی که یک بایت فقط می تواند هشت مقدار و یک عدد صحیح فقط ۳۲ مقدار را در خود جای دهد، یک BitArray می تواند تعداد دلخواه از مقادیر بولی را در خود نگه دارد. اگر حجم زیادی از داده ها را ذخیره می کنید، این تفاوت می تواند بسیار قابل توجه باشد.
در نهایت، وقتی نوبت به پردازش یک مجموعه عظیم میرسد، به محض شروع واکشی دادهها از حافظه، مزایای BitArray و پردازش بیتی مشخص خواهد شد. به عنوان مثال، تفاوت قابل توجهی در عملکرد بین BitArray 10000 آیتم و لیست ۱۰۰۰۰ آیتم وجود خواهد داشت. برای لیست هشت برابر حافظه بیشتری نسبت به BitArray لازم است.
پست های مرتبط
نحوه استفاده از BitArray در NET 7
نحوه استفاده از BitArray در NET 7
نحوه استفاده از BitArray در NET 7