C# Geeks (.NET)
334 subscribers
128 photos
1 video
98 links
Download Telegram
🤔 حرف حساب و تجربه شما
تسلط بر این رفتارها، شما رو از خیلی از خطاهای رایج مثل NullReferenceException نجات میده و بهتون دید عمیقی نسبت به مدیریت حافظه میده.

مهم‌ترین نکته‌ای که امروز در مورد آرایه‌ها یاد گرفتید چی بود؟ آیا تفاوت رفتار آرایه‌ی struct و class یا اینکه خود آرایه یک Reference Type هست، براتون جدید بود؟

خب، اینجا که نمیشه همه حرفا رو زد! 😉
ادامه‌ی بحث، سوالات، غر زدن‌ها و گپ و گفت‌های خودمونی، فقط تو گروه.
[پاتوق گیک های #C]

🔖 هشتگ‌ها :
#CSharp
#Array
🏗 آرایه‌های چندبعدی:
مستطیلی ([,]) در برابر دندانه‌دار ([][])

گاهی وقتا یه لیست ساده یا آرایه یک‌بعدی جواب کار ما رو نمیده. وقتی با داده‌های جدولی، ماتریس‌ها، یا هر ساختار شبکه‌ای سر و کار داریم، باید بریم سراغ آرایه‌های چندبعدی.

تو #C دو نوع اصلی داریم:
مستطیلی (Rectangular) و دندانه‌دار (Jagged). بیاید ببینیم فرقشون چیه و کی باید از کدوم استفاده کرد.
1️⃣آرایه‌های مستطیلی ([,]): یک شبکه منظم ▦
فکر کنید این نوع آرایه مثل یه جدول اکسل یا یه صفحه شطرنجه. یه شبکه کاملاً منظم که تعداد سطر و ستونش از اول مشخص و ثابته. تمام عناصر در یک بلوک حافظه یکپارچه قرار می‌گیرن.

نحوه تعریف: ابعاد مختلف رو با کاما (,) از هم جدا می‌کنیم.

پیمایش: برای گرفتن طول هر بعد، از متد GetLength(dimension) استفاده می‌کنیم.

// تعریف یک ماتریس ۳ در ۳
int[,] matrix = new int[3, 3];

// پیمایش و مقداردهی
for (int i = 0; i < matrix.GetLength(0); i++) // طول بعد اول (سطرها)
{
for (int j = 0; j < matrix.GetLength(1); j++) // طول بعد دوم (ستون‌ها)
{
matrix[i, j] = i * 3 + j;
}
}

// مقداردهی اولیه سریع
int[,] matrix2 =
{
{0, 1, 2},
{3, 4, 5},
{6, 7, 8}
};


2️⃣آرایه‌های دندانه‌دار ([][]):
آرایه‌ای از آرایه‌ها ⛓️
این یکی فرق داره. به جای یه شبکه منظم، شما یه آرایه دارید که هر خونه‌ش، خودش میتونه یه آرایه دیگه باشه! مثل یه قفسه‌ کتابه که هر طبقه‌ش می‌تونه تعداد متفاوتی کتاب جا بده.

نحوه تعریف: برای هر بعد، از یک جفت [] جداگانه استفاده می‌کنیم.

انعطاف‌پذیری: هر آرایه داخلی می‌تونه طول متفاوتی داشته باشه.

تله و نکته حیاتی: ⚠️
وقتی یه آرایه دندانه‌دار می‌سازید، فقط آرایه بیرونی ساخته میشه و تمام خونه‌های اون null هستن! شما باید خودتون هر آرایه داخلی رو به صورت جداگانه با new بسازید!

// تعریف یک آرایه بیرونی با ظرفیت ۳ (که هر ۳ خانه‌اش null است)
int[][] jaggedMatrix = new int[3][];

// حالا باید هر آرایه داخلی را جداگانه بسازیم
for (int i = 0; i < jaggedMatrix.Length; i++)
{
jaggedMatrix[i] = new int[i + 3]; // هر ردیف طولی متفاوت دارد

for (int j = 0; j < jaggedMatrix[i].Length; j++)
{
jaggedMatrix[i][j] = i + j;
}
}

🤔 حرف حساب و انتخاب شما
برای داده‌های جدولی و ثابت (مثل تصویر یا ماتریس) ⟵ آرایه مستطیلی ([,])

برای داده‌هایی که هر ردیفشون طول متفاوتی داره ⟵ آرایه دندانه‌دار ([][])

شما تو پروژه‌هاتون بیشتر با کدوم نوع آرایه چندبعدی سر و کار داشتید؟ یا سناریوی جالبی دارید که توش یکی از این دو نوع به وضوح برتری داشته؟

نظراتتون رو کامنت کنید! 👇
[@CSharpGeeksChat]

🔖 هشتگ‌ها :
#CSharp
#Array