آموزش سی‌شارپ C# – بخش ۴۲

آموزش سی‌شارپ C# – بخش ۴۲
  • 1392/5/2
  • Jeff Mosawy
  • 24
  • مقدمه

تا کنون شما دیدید که چگونه مجموعه‌ای از ارقام را در آرایه‌ها ذخیره کنیم؛ به‌ همین ترتیب نیز شما می‌توانید رشته‌ها را در آرایه‌های خود ذخیره کنید. در این بخش ما کمی در رابطه با رشته‌ها به‌بیان جزئیات بیشتری خواهیم پرداخت.

  • بکارگیری رشته‌ها در آرایه‌ها

با استفاده از پروژه‌های سابق، یک button به فرم خود اضافه کرده و مشخصه Text آن را به String Arrays تغییر دهید. روی آن دابل کلیک کنید تا وارد بخش کدنویسی آن شوید.

برای اینکه متنی را در آرایه ذخیره کنید، می‌بایست نوع آرایه را از جنس string انتخاب کنید؛ شکل کلی تعریف آرایه همچنان ثابت خواهد ماند.

string[] arrayStrings;

arrayStrings = new string[5];

بنابراین کد بالا آرایه‌ای با ۵ خانه برای شما در حافظه رزرو خواهد کرد که بتواند مقادیری از اون متن در خود ذخیره کند.

اکنون این ۵ خانه را مقدار دهی می‌کنم؛ دقیقاً به همان شکلی که آرایه‌های int را مقدار دهی می‌کردیم:

arrayStrings[0] = “This”;

arrayStrings[1] = “is”;

arrayStrings[2] = “a”;

arrayStrings[3] = “string”;

arrayStrings[4] = “array”;

کدهای بالا را نیز به کدهای مربوط به button جدید خود اضافه کنید تا در ادامه حلقه‌ی ForEach را برای شما معرفی کنیم.

حلقه‌ای جدید با نام ForEach

همانند قبل، برای اینکه به تک‌تک خانه‌های موجود در آرایه‌ی خود دسترسی پیدا کنید، می‌بایست که از یک حلقه for استفاده کرده تا در تک‌تک خانه‌های موجود گشت بزنید و مقادیر آن‌ها را به خروجی بدهید. چیزی شبیه به کد زیر:

for (int i=0; i != (arrayStrings.Length); i++)

{

            listBox1.Items.Add(arrayStrings[i]);

}

اما ما حلقه‌ی دیگری داریم که تا کنون با آن آشنا نبوده‌اید که به آن حلقه foreach می‌گویند. این حلقه زمانی برای شما کاربرد خواهد داشت که در حال کار کردن با «مجموعه»ای از مقادیر هستید. نحوه‌کار کردن با این حلقه را برای شما توضیح خواهیم داد، اما فعلاً کد زیر را بجای کد بالا در ادامه کدهایتان قرار دهید:

foreach (string ArrayElement in arrayStrings)

{

            listBox1.Items.Add(ArrayElement);

}

کد بالا که در Visual Studio کپی کرده‌اید، به کلمات کلیدی (Keywords) که با رنگ آبی مشخص می‌شوند دقت کنید که در کجاها قرار گرفته‌اند. شما ابتدا با کلمه foreach شروع کرده و به همراه آن، یک جفت پرانتز باز-بسته در مقابل آن قرار داده و با اضافه کردن یک جفت براکت باز-بسته، محدود حلقه خود را مشخص می‌کنید.

به کد موجود در میان پرانتز دقت کنید؛

string ArrayElement in arrayStrings

در واقع کد بالا حاوی دو بخش است که ما آن را در یک بخش می‌نویسم. در قسمت اول، یعنی string ArrayElement، شما یک متغیر جدیدی از همان نوع (string) تعریف می‌کنید. این متغیر جدید، المان‌های موجود در هر یک (معنی کلمه for each) از مکان‌ موجود در آرایه‌ی خود را در نزد خودش نگه‌داری می‌کنید. در قسمت دوم، مکانی‌ست که شما به سی‌شارپ می‌گویید که نام آرایه/مجموعه شما چیست که پس از استفاده از کلمه کلیدی in، نام آن را می‌نویسید.

در واقع این حلقه در هر مرحله از اجرای خود، تک‌تک خانه‌های آرایه/مجموعه نام‌برده شده را گشت می‌زند، آن را در ArrayElement ذخیره می‌کند و سپس آن را به listBox اضافه می‌کند. به عکس زیر هم دقت کنید که مفهوم حلقه foreach را برای شما ساده‌تر می‌کند:

1-foreach2

نرم‌افزار خود را اجرا کنید؛‌ بر روی button جدید کلیک کرده، می‌بایست نتیجه مشابه زیر باشد:

2-string_array_form

جهت دریافت این بخش آموزشی بصورت یک فایل PDF، اینجا را کلیک کنید.

دیدگاه خود را وارد کنید
تعداد دیدگاه ها : 24 دیدگاه
  1. سلام
    ممنون از آموزشتون
    می شه بگید Regex چه کاری رو انجام می ده
    و اینکه چطور در لیست باکس یه اینتر بزنیم؟
    مثل همون \n یا endl در C++ منظورمه!

    1. دوست عزیزم سلام،

      ممنون از نظر لطفتون! Regex اصطلاحاً یک Regular Expression در زبان‌های .NET می‌باشد که بیشتر برای stringها بکاربرده می‌شود و با تعیین یک الگوی خاصی، می‌توانید کارهایی مثل پیدا کردن یک کارکتر یا کلمه خاص در یک متن بلند و … انجام دهید؛ کارها و ریزه‌کاری‌های زیادی داره که جای بحثش اینجا نیست.
      در رابطه با سوال دوم شما، دقیقاً متوجه منظورتون نشدم. ما اغلب استفاده ما از لیست باکس، نمایش یک سری اطلاعات به‌صورت مرتب هستیم، حالا دقیقاً وارد سطر بعدی بشیم، منظور چیه؟ دستورهایی مثل /n و endl در زبان‌های C/C++ برای کنسول استفاده می‌شوند که باید به سطر بعدی بروند.

      موفق باشید!

  2. ببینید می خوام کدی بنویسم که مثلا رشته ی :
    Choose the word
    رو بگیره و کلمه به کلمه زیر هم نشون بده
    که بعد از زدن کلید اینجوری نشونش می ده:
    Choose
    the
    word
    حالا یه رشته دیگه وارد می کنم:
    that has the same meaning
    که بعد از زدن کلید چیزی که تو لیست باکس هست اینه:
    Choose
    the
    word
    that
    has
    the
    same
    meaning
    ولی می خوام نتیجه این باشه:
    Choose
    the
    word

    that
    has
    the
    same
    meaning
    بین دفعه ی اول و دوم یه اینتر بزنه، یه سطر خالی!

    1. سلام دوست عزیز،

      راحت‌ترین راه که می‌شه چنین کاری کرد، بنظرم ابتدا رشته را از کاربر دریافت کنید و سپس آن را در یک List کلمه به کلمه ذخیره کنید و سپس شروع به نمایش تک‌تک عناصر موجود در List اقدام کنید.
      فاصله انداختن میان دو کلمه در یک ListBox که توسط مایکروسافت در Visual Studio تعبیه شده امکان‌پذیر نیست؛ مگر اینکه یک Item خالی رو Add کنید که اینگار فاصله افتاده. شما باید بگردید به دنبال یک Component که نیاز شما را در لیست‌باکس برطرف می‌کنه.
      امیدوارم که کمکی کرده باشم.
      موفق باشید!

  3. سلام
    می خواستم بدونم اگه یه برنامه سی شارپ را بخواهیم روی کامپیوترها جابجا کنیم کجا باید گپی بشه که بتونیم کدهاشم ببینیم. و کاملا اجرا بشه.
    ممنون

    1. سلام دوست عزیزم،

      شما می‌توانید فولدر مربوط به Project خودتون رو به کامپیوترهای دیگه انتقال بدید (که Visual Studio هم داشته باشند) تا شما بتوانید هم کدها رو ببینید و هم برنامه‌ها را Compile کرده و اجرا نمایید.
      دقت کنید که باید در کامپیوتر مقصد، نسخه‌ی .NET Framework شما برابر (و بالاتر) نسخه‌ای باشد که با آن نرم‌افزار خودتون رو نوشتید.
      موفق باشید!

  4. دوباره سلام
    یه جمله رو مثل همونی که دفعه ی قبل گفتم که تو txtbox نشون دادم
    حالا می خوام تو فرمم به treeviwe داشته یاشم و تیکه تیکه تو اون نشون بدم
    این برنامه :
    http://barnamenevis.org/showthread.php?324761-%D8%B3%D9%88%D8%A7%D9%84-%D8%AF%D8%B1-%D9%85%D9%88%D8%B1%D8%AF-%D8%A7%DB%8C%D8%AC%D8%A7%D8%AF-%D8%AF%D8%B1%D8%AE%D8%AA-%D8%AF%D8%B1-%D8%B3%DB%8C-%D8%B4%D8%A7%D8%B1%D9%BE
    رو دیدم ولی زیاد نتومستم ازش استفاده کنم
    ممنون می شم راهنمایی کنید

    1. سلام دوست عزیزم،

      من مطلب قبلیتون رو راستش بخاطر ندارم؛ اما در رابطه با Treeview، شما می‌خواهید مثلاً درخت‌های دودویی درست کنید؟ اگر پاسختون مثبت هست، من تا حالا به چنین مواردی مواجه نشدم. اگر منظورتون چیز دیگه‌ای بود من قطعاً در خدمت خواهم بود.
      موفق باشید!

    2. راستش من خیلی خیلی کم با سی شارپ کار کردم (در واقع تازه شروع کردم)
      بخاطر همین جواب سوالاتم زیاد چیز عجیب غریبی نیست
      این رو تو برنامه نویس دات آی آر دیدم مشکلم رو حل کرد:

      Dim tv As New TreeNode
      tv.Text = “ali”
      tv.Name = “12”
      TreeView1.Nodes.Add(tv)

      خیلی خوشحالم که کسی هست که کمک کنه و به سوالاتم جواب بده
      ممنون

  5. سلام
    یه رشته رو قسمت بندی کردم و به صورت درختی نشون دادم اینجوری:
    ریشه
    فرزند
    فرزند
    فرزند
    ….
    حالا می خوام رشته ی بعدی رو که وارد می کنم بیاد اینو بررسی کنه
    تا جایی که با قبلی مشترکه دیگه دوباره ننویسه و بیاد از ادامه قسمت بندی کنه، لینجوری:
    ریشه
    فرزند
    فرزند فرزند
    فرزند
    ….

    یا مثلا:

    ریشه
    فرزند فرزند
    فرزند
    فرزند
    ….

    می دونید چطوری می شه؟

    1. سلام دوست عزیزم،

      اگر منظور شما نمایش درخت‌های دودویی هست، متأسفانه خودم تا حالا با چنین موردی برخورد نکردم و تا حالا برای نحوه نمایش آن‌ها فکر نکرده‌ام.
      موفق باشید!

  6. سلام
    PDF این قسمت را فراموش کردید قرار بدید .. همه PDF ها هستند الا این بخش ..
    از آموزش های خوبتون بسیار ممنون .. موفق باشید

    1. با سلام،

      تا ساعات آینده قرار خواهد گرفت.
      موفق باشید!

    2. سلام
      Jeff Mosawy چرا آموزش سی شارپ ادامه نمیدید؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟

      خیلی بده نصفه رهاش کردید

  7. با سلام
    سوال من ربطی به این مبحث نداره اما در تخصص شماست.
    داخل form یک سری نقاط تصادفی با system.drowing ایجاد کردم.حالا میخوام فاصله این نقاط از هم و مختصاتشونو به دست بیارم.
    میتونید کمکم کنید؟

  8. سلام
    خدا قوت من تازه آشنا شدم با گویا

    بیصبرانه منتظر ادامش هستم.

    با آرزوی موفقیت ضمن تشکر فراوان

  9. سلام خسته نباشید واقعا ممنون از کارتون.
    ببخشید آموزشهای قسمت ۴۳ تا ۴۸ رو قرار ندادید توی سایت؟
    آخه فقط تکست هستن و نمیشه روی اونها کلیک کرد. آموزش این قسمت ها رو میخوام.مرسی

  10. سلام این قسمت آموزش فوق العاده است چرا ادامه ندادید؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
    من تماس گرفتم تلفنی از مسوول آموزش سی شارپ تشکر کنم گفتند نمیشه خودمون بهش میگیم
    خواهش میکنم بقیه سر فصل ها روهم بنویسید.
    نکنه مسوول این قسمت دیگه وجود نداره و رفته از این سایت
    جوابببببببببببببببببببببب بدید
    یه سایت خوب پیدا کردم واسه آموزش اونم نصفه است خب چرا؟؟؟ واقعا زشته آدم یه کار نصفه ول کنه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *