خوش اومدید.
توی این ویدیو می‌خوایم بفهمیم کدوم وضعیت آب‌وهوا بیشتر تکرار شده :
چون ما چهار وضعیت مختلف داریم آفتابی، بارونی، ابری و برفی.
و حالا می‌خوایم بدونیم کدوم بیشتر رخ داده.
برای همین یه متد جدید می‌سازم که یه رشته برگردونه.
این متد استاتیک خواهد بود چون در غیر این صورت نمی‌تونم صداش بزنم.mainداخل متد
می‌تونید امتحان کنید.
کار نخواهد کرد.
اسم این متد رو می‌ذارم mostCommonCondition.
و همه‌ی شرایط رو بهش پاس می‌دم.
یعنی conditions.
خب حالا واضحه که باید یه مقداری برگردونه.
ولی قبل از برگردوندن، یه متغیر می‌سازم که بشماره هر شرط چند بار اتفاق افتاده.
همچنین.
و یه متغیر دیگه هم می‌سازم برای ذخیره‌ی رایج‌ترین وضعیت، conditions که در ابتدا می‌ذارمش روی در موقعیت صفر.
یعنی اولین مقدار.
conditions پس می‌تونم فرض کنم اولین ورودی داخل همون رایج‌ترین شرطه، چون
در ابتدای کار فقط همونه، وقتی شروع به مقایسه با بقیه می‌کنم می‌فهمم آیا مورد دیگه‌ای.
بیشتر تکرار شده یا نه خب حالا.
for اینجا از یه حلقه استفاده می‌کنم، از صفر شروع می‌کنم.
و شرط می‌ذارم conditions.length.
یعنی از اول تا آخر همه‌ی شرایط رو بررسی می‌کنم.
temporary count و یه متغیر دیگه می‌سازم به اسم for که فقط داخل همین حلقه
در دسترس خواهد بود.
پس فقط باید بدونم برای وضعیت فعلی چند بار ظاهر شدی.
بعد باید اون رو با هر شمارش دیگه مقایسه کنم.
پس اگر وضعیت فعلی بیشتر از بقیه دفعات رخ داده باشه، اون‌وقت می‌فهمم tempCountکه این وضعیت رایج‌ترینه و به‌همین‌خاطر باید شمارش رو با مقایسه کنم.
این وقتی کد رو ببینیم خیلی واضح‌تر میشه.
خب بزن بریم و ادامه بدیم.
پس یه حلقه for دیگه می‌ذارم که با j جلو میره.
یعنی این یک for داخل for دیگه‌ست.
این دفعه از j به‌جای i استفاده می‌کنیم تا بدونیم داریم توی تکرار داخلی هستیم.
conditions حلقه دوم هم از اول تا آخر رو طی می‌کنه.
چرا این‌کارو می‌کنیم؟
خب قضیه اینه که ما همه‌ی شرایط رو می‌گردیم،
بعد تو هر تکرار برای هر شرط، دوباره همه‌ی شرایط رو می‌گذرونیم.
یعنی از این برای مقایسه استفاده می‌کنیم.
پس این یعنی از اون برای مقایسه استفاده می‌کنیم.
پس اگر بگم اگر conditions[j] برابر با conditions[i] باشد، tempCount رو افزایش بدم.
اون‌وقت می‌دونم باید
باشه.
پس بیرون از این حلقه می‌تونم بررسی کنم آیا tempCount از count بزرگ‌تره یا نه.
اگه این‌طور باشه، اون‌وقت می‌دونم count می‌شه tempCount و رایج‌ترین وضعیت هم می‌شه شرطِ i.
پس بعدش می‌تونم mostCommon رو برگردونم.
خب اینجا چه خبره؟
چون کلی اتفاق داره میفته.
پس فرض کنیم پنج وضعیت داریم.
و اولین وضعیتی که بررسی می‌کنیم این یکی خواهد بود.
پس بیایم تلاش کنیم بفهمیم اینجا چه اتفاقی داره میفته.
for پس کاری که می‌کنیم اینه که با این حلقه همه شرایط رو طی می‌کنیم.
و بعد این متغیر رو در هر تکرار یک بار جدید ایجاد می‌کنیم.
یعنی برای هر شرط، مرحله به مرحله اون رو بررسی می‌کنیم.
و برای هر شرط همین روند رو انجام می‌دیم.
فرض کنیم ده وضعیت آب‌وهوایی مختلف داریم، نه انواع مختلف شرایط.
نه این موردی که اینجا هست، بلکه ده روز مختلف داریم که شرایط ثبت شده‌اند.
پس برای هر روزی که یه وضعیت خاص داریم، اون وضعیت رو به‌طور کامل بررسی می‌کنیم.
ما یه tempCount می‌سازیم که فقط نشون می‌ده اون وضعیت خاص چند بار داخل آرایه وجود داره.
باشه.
پس فرض کنیم در این تکرار، اولین تکرار، وضعیت آفتابیه.
اوکی.
حالا با این حلقه بررسی می‌کنیم.
همه شرایط رو دوباره می‌گذرونیم.
و بررسی می‌کنیم آیا وضعیت آفتابی با شرایطی که الان داریم نگاه می‌کنیم برابر هست یا نه.
پس اگر اولی آفتابی بود، حالا دومی رو نگاه می‌کنیم.
آیا اون هم آفتابیه؟
سومی هم آفتابیه؟
چهارمی هم آفتابیه؟
tempCount و هر بار که یکی از اون‌ها آفتابیه، رو افزایش می‌دیم.
حالا داریم می‌گیم اوکی، در واقع آفتابی یک بار بوده و اگر دوباره آفتابی بود،
رو دوباره افزایش می‌دیم.tempCount
و بعد از اینکه مقایسه‌ی وضعیت فعلی با بقیه‌ی وضعیت‌ها تمام شد،
tempCount یعنی وقتی دیدیم اون وضعیت چند بار رخ داده، رو بررسی می‌کنیم.
(tempCount) پس مقدار موقت برای وضعیت فعلی یا به‌قولی وضعیت «امروز»
آیا بزرگ‌تر یا بیشتر است یا نه؟
سپس...
(count) مقدار دیگری که ما به‌عنوان شمارش کلی تنظیم کرده‌ایم را بررسی می‌کنیم.
اگر این‌طور باشد، شمارش کلی را بازنویسی می‌کنیم.
یعنی هر مقداری که قبلاً به‌عنوان بیشترین تعداد وقوعِ یک وضعیت ثبت شده بود را با شمارشِ موقت وضعیت جاری (همان که الآن در حلقه for داریم) جایگزین می‌کنیم.
و هم‌زمان...
اعلام می‌کنیم که وضعیت فعلی...
در همان موقعیتِ تکرار حلقه (یعنی اندیس i) همان وضعیتی است که بیشترین تکرار را دارد.
را برمی‌گردانیم.mostCommon پس سپس
فکر می‌کنم اگه این رو مرحله‌به‌مرحله اجرا کنیم، بهتر متوجه خواهید شد.
اینجا بگذارم.breakpoint بذارید یک
و بعد بیایید این خط رو اجرا کنیم.
پس از Console.WriteLine استفاده می‌کنم و می‌گم «رایج‌ترین وضعیت این است» یا «بود».
اگر از همون ساختاری که قبلاً داشتم پیروی کنیم باز هم به آکولاد نیاز داریم.
و متد mostCommonCondition رو با آرایهٔ conditions صدا می‌زنیم.
weatherConditions و باید اینجا آرایهٔ رو پاس بدیم، باشه؟
رایج‌ترین وضعیت همون مقداری خواهد بود که از weatherConditions برمی‌گرده.
حالا بیایم این رو اجرا کنیم.
پس فرض کنیم پنج بار شبیه‌سازی می‌کنیم.
را صفر می‌کنیم.tempCount می‌رویم داخل و
در این لحظه شرایط ما به‌صورت این‌ها هستند: آفتابی، بارانی، ابری، آفتابی و برفی.
پس وضعیتی که بیشترین تکرار را دارد، آفتابی خواهد بود.
و در تکرار اول هم آفتابی است.
پس بیایید مرحله‌به‌مرحله جلو بریم.
پس ما شرایط را داریم.
conditions الان دارد بررسی می‌کند که آیا در موقعیت صفر
conditions آیا همان در موقعیت صفر هم هست یا نه.
پس داره بررسی می‌کنه که «آیا آفتابی برابر با آفتابی هست؟»
پس می‌گه آره، درستِ.
درست درمیاد.if پس این
می‌شه.if و وارد بلاک
رو یک واحد افزایش می‌ده.tempCount و
بعد می‌ریم مرحله بعدی.
پیش می‌ریم.for دوباره توی این حلقه
J دوباره یک واحد افزایش پیدا می‌کنه.
حالا قراره چک کنه...
آیا هنوز آیتمی داخل آرایه‌مون هست؟
بله، هنوز هست.
الان داره بررسی می‌کنه آیا شرط در موقعیت یک همان شرط در موقعیت صفر هست یا نه.
یعنی اساساً داره می‌پرسه «آیا آفتابی برابر با بارونی هست؟» که صادق نیست.
بیرون می‌آد.if پس از این
بیایم دوباره اجراش کنیم.
J دوباره افزایش پیدا می‌کنه.
داره چک می‌کنه...
داریم؟conditions آیا هنوز آیتم‌هایی داخل آرایه
بله داریم.
پس وارد این if می‌شه که مقایسه می‌کنه: آیا شرط در موقعیت دو (جایی که الان j هست = 2)
همان شرطِ موقعیت صفر هست؟
یعنی می‌پرسه «آیا آفتابی برابر با ابری هست؟»
نه، اینطور نیست.
پس نه، برابر نیست.
میاد بیرون.for پس از این
و دوباره چک می‌کنه.
هنوز آیتمی داریم؟ حالا داره بررسی می‌کنه که j برابر سه هست یا نه.
آره، j الان سه هست.
پس بررسی می‌کنه آیا شرط در موقعیت سوم همون شرط موقعیت صفر هست؟
این دقیقاً کاریه که این بررسی انجام می‌ده.
بله، درسته.
tempCount پس چی می‌شه؟ یک واحد افزایش پیدا می‌کنه.
بیایم اینجا ببینیم.
tempCount می‌بینیم صفر بود.
tempCount و در این تکرار بعدی می‌شه ۲.
پس الان می‌دونیم... خوب، می‌ره سراغ آخرین تکرار، یعنی آیتم پنجم.
چک می‌کنه آیا شرط در موقعیت چهار، یعنی اندیس ۴، برفی برابر با آفتابی هست؟
نه، اینطور نیست.
هم خارج می‌شه.if پس از این
for و همینطور از این هم خارج می‌شه چون دیگه آیتمی نیست.
J دوباره افزایش پیدا می‌کنه.
چک می‌کنه...
چک می‌کنه آیا آیتم دیگه‌ای وجود داره؟
می‌گه نه، دیگه آیتمی نیست.
پس می‌ره به این if که چک می‌کنه: آیا tempCount بزرگتر از count هست؟ یعنی آیا ۲ بزرگتر از صفر هست؟
بله، همینطوره.
count پس می‌ره خط بعد که می‌گه اوکی، که قبلاً صفر بود...
tempCount حالا قراره با جدیدمون که مقدارش دوئه بازنویسی بشه.
و هم‌زمان هر چیزی که قبلاً به‌عنوان رایج‌ترین وضعیت ثبت شده بود، با وضعیتِ فعلیِ ایندکس صفر جایگزین می‌شه،
conditions[0] چون در این لحظه i برابر با صفره و آفتابیه.
پس حالا می‌دونیم رایج‌ترین وضعیت آفتابیه.
این یک تکرار از حلقهٔ بیرونی for ما بود.
conditions حالا همین کار رو برای هر آیتم دیگه در آرایهٔ انجام می‌ده، خوب؟
پس دوباره امتحان می‌کنه.
حالا i رو یکی افزایش می‌ده.
پس چک می‌کنه...
آیا هنوز آیتم توی لیست داریم؟
آره داریم.
و حالا کل این فرایند رو از اول انجام می‌ده.
می‌سازه.int tempCount = 0 یه متغیر
for این حلقهٔ داخلی رو بارها اجرا می‌کنه.
حالا مقایسه‌ش رو انجام می‌ده.
آیا ورودی در موقعیت صفر...
همان ورودی در موقعیت یک هست؟
conditions اگه به آرایهٔ نگاه کنیم می‌بینیم: آیا آفتابی برابر با بارونی هست؟
خیر نیست.
پس از اون بیرون می‌آد.
و دوباره و دوباره این کارو تکرار می‌کنه.
شد، ضمناً.true فقط یک بار هم
چون وقتی اندیس برابر با یک بود، بررسی می‌کرد آیا بارونی برابر با بارونی هست — بله.
بارونی برابر با بارونی.
پس همون‌جا true شد.
ولی در کل هر بار مقایسه می‌کنه و می‌بینه بارونی فقط یک‌بار رخ داده.
می‌شه یک.tempCount پس در این نقطه
چون بارونی فقط یک‌بار بود.
و بله، بعدش از این تکرارِ حلقه بیرون پرید.
و حالا همین کار رو برای همهٔ آیتم‌های دیگه هم انجام می‌ده.
که شامل ابری، آفتابی و برفی هستن.
پس چون آفتابی دوبار تکرار شده، دوباره اون بخش مربوط به آفتابی رو اجرا می‌کنه.
و می‌بینه آفتابی دوبار وجود داره.
پس در نهایت آفتابی به‌عنوان رایج‌ترین یا پرتکرارترین آیتم انتخاب می‌شه.
خب، این دقیقاً همون روشیه که ما فهمیدیم کدوم آیتم بیشتر از همه تکرار شده.
حالا می‌تونیم از این حلقه خارج بشیم و دوباره خارج بشیم.
و بعد نتیجه رو اینجا ببینیم.
رایج‌ترین وضعیت: آفتابی.
خیلی خب.
پس این بخش کمی پیچیده‌تر بود و کارهای بیشتری اینجا انجام شد.
ولی در واقع ما چندین مفهوم رو با هم ترکیب کردیم.
دیدید که حلقه‌های for رو با هم ترکیب کردیم، با افزایش شمارنده‌ها، با شرط‌ها و با متدها.
و در نهایت تونستیم بفهمیم کدوم آیتم در یک آرایه بیشتر از همه تکرار شده.
خب، این از این ویدیو.
حالا طبیعتاً می‌تونید یک قدم جلوتر برید و بگید خب، اگه چند آیتم دقیقاً تعداد برابر
داشتن چی؟
می‌شه ادامه داد.
می‌تونید کد رو پیچیده‌تر کنید و بگید خب، اگه هم آفتابی و هم ابری
برای مثال اگه هم آفتابی و هم ابری هر کدوم دوبار تکرار شده باشن، هر دو به یک اندازه رایج‌ترین محسوب می‌شن.
پس در این حالت باید کد رو گسترش بدید، اما این بخشی هست که دیگه به شما می‌سپارم.
براتون آرزوی موفقیت می‌کنم و توی ویدیوی بعدی می‌بینمتون.