PDA

View Full Version : آرایه پویا



davood_mir
دوشنبه 09 شهریور 1388, 05:32 صبح
سلام
چطور می تونیم یک آرایه پویا تو سی شارپ داشته باشیم؟یعنی نخواهیم تعداد خونه ها را براش مشخص کنیم

majid325
دوشنبه 09 شهریور 1388, 06:00 صبح
ببین این (http://barnamenevis.org/forum/showpost.php?p=469017&postcount=45) اینک کمکت میکنه

dr_csharp
دوشنبه 09 شهریور 1388, 10:28 صبح
سلام
چطور می تونیم یک آرایه پویا تو سی شارپ داشته باشیم؟یعنی نخواهیم تعداد خونه ها را براش مشخص کنیم
سلام
ميتونيد از System.Collections.ArrayList استفاده كنيد.
و در تكنيك جديد بهتره از linq‌استفاده كنيد !

alireza_tavakol
دوشنبه 09 شهریور 1388, 12:59 عصر
من واسه پیاده سازی آرایه پویا از کد زیر استفاده میکنم . البته سر بار زیادی داره

int [] a=new int[2];
a[0]=10;
a[1]=12;

int[] temp = new int[a.Length];
temp = a;

a = new int[5];

for(int i=0;i<temp.Length;i++)
a[i] = temp[i];

a[2] = 20;
a[3] = 22;
a[4] = 24;

foreach (int i in a)
MessageBox.Show(i.ToString());

توی این کد آرایه a در مرحله اول دو عنصر داره و در مرحله بعد پنج عنصر داره و مقدار عناصری که در مرحله اول ثبت شده حفظ میشه

alireza_tavakol
دوشنبه 09 شهریور 1388, 13:27 عصر
با سلام

من قصد دفاع کردن از کدم رو ندارم و خودم می دونم کارم غیر اصولیه


سلام
ميتونيد از System.Collections.ArrayList استفاده كنيد.
و در تكنيك جديد بهتره از linq‌استفاده كنيد !



1- arraylist : این کلاس برای پیاده سازی لیست پیوندی است
2- LINQ : اگه زحمت می کشیدین و با یک مثال عملی این کار رو انجام می دادین خیلی بهتر بود.

Salar Ashgi
دوشنبه 09 شهریور 1388, 14:46 عصر
سلام ، به نظر من بهترین گزینه برای این کار Generic Collections هستند !



List<int> list = new List<int>();


البته ArrayList واسه خودش یه سری مشکلات داره (1- No type safety و 2- Boxing , Unboxing )

که واسه این کارها مناسب نیست !

و در مورد توضیح دوستمون alireza_tavakol (http://www.barnamenevis.org/forum/member.php?u=17033) ،که گفتن Arraylist واسه طراحی لیست پیوندی است ، ولی

در سی شارپ برای تمام ساختمان داده ها کلاس مستقلی وجود داره و این کلاس ارتباطی به کلاس

Arraylist نداره !!!

اوبالیت به بو
دوشنبه 09 شهریور 1388, 16:13 عصر
int i; //size of array
int[] ai; //array
console.write("Size of array: \t");
i=int.parse(console.ReadLine());
ai=new int[i]; //initial
for (int k=0; k<i; k++)
console.write(ai[k].ToString() + "\t");

alireza_tavakol
دوشنبه 09 شهریور 1388, 18:13 عصر
int i; //size of array
int[] ai; //array
console.write("Size of array: \t");
i=int.parse(console.ReadLine());
ai=new int[i]; //initial
for (int k=0; k<i; k++)
console.write(ai[k].ToString() + "\t");
:متعجب::متعجب::متعجب:

میشه توضیح بدین در این کد چه نکته ی نهفته ای وجود داره که باعث به وجود آمدن آرایه پویا شده؟:متفکر:

alireza_tavakol
دوشنبه 09 شهریور 1388, 18:19 عصر
سلام ، به نظر من بهترین گزینه برای این کار Generic Collections هستند !



List<int> list = new List<int>();

در سی شارپ برای تمام ساختمان داده ها کلاس مستقلی وجود داره و این کلاس ارتباطی به کلاس

Arraylist نداره !!!

با تشکر از راهنمایی شما دوست گرامی

من سوالی داشتم در رابطه با تفاوت بین آرایه و جنریک لیست که شما مطرح کردین

من شنیده ام در هنگام ذخیره کردن عناصر موجود در آرایه ، تمام عناصر به صورت پیوسته در خانه های حافظه ذخیره میشه و این امر باعث افزایش سرعت دسترسی به عناصر آرایه میشه ولی ساختمان هایی همچون array list و Generic list به علت امکان درج عنصر در مکان دلخواه به صورت پراکننده عناصر را در RAM ذخیره میکنند . و این امر باعث میشه وقتی قراره به عنصر پنجم دسترسی پیدا کنیم به ترتیب از عنصر اول تا چهارم را بخوانیم تا به عنصر پنجم برسیم ( البته این فرایند خوانده شده عنصر اول تا چهارم به دور از چشم برنامه نویس و توسط کامپایلر انجام میشه )

alireza_tavakol
سه شنبه 10 شهریور 1388, 01:52 صبح
شایعه بوده باور نکن.

با تشکر ، میشه بفرمایید کدوم بخش شایعه بوده

1- آیا آرایه به صورت پیوسته در RAM ذخیره نمیشه؟:متفکر:
2- آیا لیست به صورت پیوسته در RAM ذخیره میشه؟:متفکر:
3- آیا پیمایش لیست و آرایه یکسانه ؟:متفکر:

اوبالیت به بو
سه شنبه 10 شهریور 1388, 13:08 عصر
میشه توضیح بدین در این کد چه نکته ی نهفته ای وجود داره که باعث به وجود آمدن آرایه پویا شده؟

نكته اي نمي بينم. اشتباه كردم.
معمولاً از Linked List استفاده مي كنن.

ma1191
دوشنبه 02 مرداد 1391, 15:52 عصر
سلام
چطور می تونیم یک آرایه پویا تو سی شارپ داشته باشیم؟یعنی نخواهیم تعداد خونه ها را براش مشخص کنیم


میتونید از دستور Array.Resize(); l استفاده کنید
مثلا اگه آرایه ای به نام num دارید
Array.Resize(ref num,2); l
میتونید هر دفعه بیشترش کنید