تمام سوالات سوالات بدون پاسخ سوال بپرسید

سلام
یکی از مشکلاتی که در زبان #C وجود داره مربوط به الزامی بودن مشخص کردن اندازه آرایه در زمان تعریف اون هستش.از دوستان کسی می دونه آیا راهی برای تعریف آرایه با اندازه پویا وجود داره؟

4

به نظر من ثابت بودن طول مشکل محسوب نمیشه، برای طول متغییر میتونید از سایر عناصر دات نت استفاده کنید اما دلیل اصلی که آرایه ها طول ثابت دارند، این است که آرایه در حافظه به صورت پشت سرهم قرار میگیرد تا بدون پرش بتوان به داده ی بعدی دسترسی پیدا کرد این یعنی سرعت بسیار بالا؛ به این خاطر باید در ابتدا مشخص شود که طول آن چقدر است وگرنه ممکن است پس از رشد کردن آرایه، دیگر فضای یکپارچه در آن منطقه نباشد و سیستم مجبور شود کل آرایه را در مکانی که گنجایش مناسبی دارد، کپی کند.

(15 آوریل '12, 02:47) amir
2 پاسخ

اندازه آرایه در زمان تعریفش میتونه ذکر نشه. اما وقتی یک آرایه رو تعریف می کنی، قبل از اینکه بتونی ازش استفاده کنی باید اون رو نمونه گذاری کنی. مثلا در زمان تعریف یک آرایه کد زیر رو بزنی:

string[] sampleArray;

و بعد از اینکه محاسباتی کردی و مشخص شد اندازه آرایه چقدر است نمونه سازی کنی:

sampleArray=new string[n];


حالا اگر خواستی در طول اجرای برنامه، اندازه آرایه کم و یا زیاد بشه (یعنی آرایه پویا؛ همون چیزی که شما می خوای) باید از کلاسهای ویژه ای که برای همین منظور ساخته شدن استفاده کنی. یکی از این کلاس ها List است. طریقه استفاده اش بصورت زیر است:

List<type_of_array> name = new List<type_of_array>();

به عنوان مثال:

List<string> myArr = new List<string>();
myArr.Add("sample string");      //Adds new an object to end of list
myArr.Remove(0);            //Removes an object at 0 index

اگر بخواهی، حتی می تونی نوع اعضاء آرایه رو هم ندی! با استفاده از کلاس ArrayList:

ArrayList a = new ArrayList();
a.Add(1);
a.Add("salam");
a.Add(new Color());

یک کلاس دیگه هم هست که در جای خودش گزینه خوبیه. بهش می گن لغتنامه (Dictionary). بصورت زیر میتونی استفاده کنی:

Dictionary<string, int> dic = new Dictionary<string, int>();
dic.Add("ali", 1);
dic.Add("mahdi", 12);
Console.WriteLine(dic["mahdi"]);    //Output: 12

کلاس دیگه ای هست به نام ObservableCollection که یک مجوعه داده رو ارائه میده. کاربردش توی WPF است. فرض کن شما توی XAML یک ListBox داشته باشی که بخوای محتویاتش رو به یک مجموعه داده متصل کنی (Binding). حالا اگر مجموعه داده تغییر کنه، توی ListBox هیچ تغییری دیده نمیشه تا اینکه به طریقی ازش با خبر بشه.ObservableCollection این کار رو برای شما میکنه. یک مجموعه داده ارائه میده که هر وقت شی ای از این مجوعه حذف،اضافه، یا کل مجموعه نوسازی بشه تغییرات رو اطلاع میده. طریقه استفاده اش بصورت زیر هست (مثال از MSDN)

public class NameList : ObservableCollection<PersonName>

{ public NameList() : base() { Add(new PersonName("Willa", "Cather")); Add(new PersonName("Isak", "Dinesen")); Add(new PersonName("Victor", "Hugo")); Add(new PersonName("Jules", "Verne")); } }

public class PersonName { private string firstName; private string lastName;

  public PersonName(string first, string last)
  {
      this.firstName = first;
      this.lastName = last;
  }

  public string FirstName
  {
      get { return firstName; }
      set { firstName = value; }
  }

  public string LastName
  {
      get { return lastName; }
      set { lastName = value; }
  }

}

علاوه بر موارد فوق بسته به چیزی که لازم داری، میتونی از Enumerable Collection یا مجموعه شمارشی هم استفاده کنی. در واقع یک رابط (Interface) هست. مثالش طولانیه؛ میتونی به سایت MSDN بری و مثالش رو ببینی.

موفق باشی


آرایه ها در #C اندازه ثابتی دارند و در تعریف نوع آرایه باید اندازه آن را نیز ذکر کنید.بجای آن می تواند از انواعی مانند ArrayList و یا List برای کاربرد هاتون استفاده کنید.

toggle preview



آموزش زبان برنامه نویسی C#
آموزش jquery
آموزش برنامه نویسی
آموزش طراحی وبسایت
آموزش مدیریت وبسایت
آموزش جاوا Java
آموزش پایتون Python
آموزش سی شارپ C#‎
آموزش HTML و CSS
آموزش JavaScript جاوااسکریپت
آموزش jQuery جی کوئری
آموزش ساخت ربات تلگرام
آموزش برنامه‌نویسی PHP
آموزش برنامه‌نویسی اندروید
● آموزش‌های رایگان

سوالات مرتبط

راهنمای استفاده از ویرایشگر
  • *ایتالیک*‌ یا __ایتالیک__
  • **ضخیم** یا __ضخیم__
  • آدرس:[متن](http://url.com/ "عنوان")
  • عکس?![alt متن](/path/img.jpg "عنوان")
  • لیست عددی: 1. Foo 2. Bar
  • برای رفتن به خط بعد، هر جا مایلید که خط جدید شروع شود دو کاراکتر فاصله (space) قرار دهید
  • تگ‌های ساده HTML هم پشتیبانی می‌شوند

تگها:
  • ×46
  • ×44
  • پرسیده شده: 19 فوریه '12, 12:42
  • بازدید: 15,402 بار
  • آخرین بروزرسانی: 15 آوریل '12, 02:47

این سوال را دنبال کنیدتوسط ایمیل: ایمیل شما (باید معتبر باشد, هرگز به دیگران نمایش داده نمیشود):

هنگامی که شما به سیستم وارد شوید،قادر خواهید بود برای بروز رسانی ها مشترک شوید.


توسط RSS:

پاسخها

پاسخها و نظرها