PDA

View Full Version : سوال: سوال در مورد تعریف آرایه ای با طول نا مشخص



mahdi-1
چهارشنبه 08 آبان 1392, 16:35 عصر
سلام
چه طور میشه یک آرایه ای رو تعریف کرد که طولش هر بار که داده اضافه میشه بیشتر بشه و مقادیر قبلی از بین نره.
یعنی الگوریتمش اینطوری باشه که تا زمانی که مقدار ورودی به آرایه علامت@ نباشد ذخیره کن وگرنه همه را چاپ کن.
من خودم با آرایه ای از نوع اشاره گر امتحان کردم که تو حلقه while هر بار یه فضا به عنصر جدید بده و مقدار رو توش قرار بده ولی نشد.
فقط نمیخوام اول یه آرایه با 1000000 عنصر تعریف کنم بلکه میخوام به اندازه عناصر ورودی حافظه اشغال بشه.

hamid_hr
چهارشنبه 08 آبان 1392, 16:39 عصر
ميتوني از arraylist يا List استفاده كني
اصلا نميخواد براش فضا تعيين كني

mahdi-1
چهارشنبه 08 آبان 1392, 16:41 عصر
به جز کلاس List راه دیگه ای نداره.
میشه بیشتر توضیح بدین؟

hamid_hr
چهارشنبه 08 آبان 1392, 16:57 عصر
مثلا شما ميخواي يه ارايه از نوع string داشته باشي
مينويسي
List<string> ls = new List<string>();

بعد اينطوري ميتوني بهش مقدار بدي
ls.add("aa");
ls.add("bb");
ls.add("cc");


برا اينكه بخواي به ارايه تبديل كني مينويسي

string[] st = ls.toarray();

mahdi-1
چهارشنبه 08 آبان 1392, 16:58 عصر
به جز کلاس List راه دیگه ای نداره.
میشه بیشتر توضیح بدین؟
یه مرد نبود کمک کنه؟

mahdi-1
چهارشنبه 08 آبان 1392, 17:08 عصر
مثلا شما ميخواي يه ارايه از نوع string داشته باشي
مينويسي
List<string> ls = new List<string>();

بعد اينطوري ميتوني بهش مقدار بدي
ls.add("aa");
ls.add("bb");
ls.add("cc");


برا اينكه بخواي به ارايه تبديل كني مينويسي

string[] st = ls.toarray();


ممنون از جوابتون ولی راه دیگه ای جز کلاس Link نداره؟ چون میخوام با آرایه و اشاره گر پیاده سازی کنم.

اوبالیت به بو
چهارشنبه 08 آبان 1392, 22:49 عصر
درود بر شما

این کار بوسیله اشاره گر ها در خانواده C و C++ و C# امکان پذیر هست. یک نگاهی به این تایپیک بندازید:
http://www.cplusplus.com/forum/beginner/7961/

یک روش دیگه هم هست که در پست های بالاتر توسط دوستمون اشاره شد. در این تایپیک مطرح شده:
http://stackoverflow.com/questions/1026134/define-a-double-array-without-a-fixed-size

sobhmoud
چهارشنبه 08 آبان 1392, 23:44 عصر
سلام
می تونی از لیست پیوندی استفاده کنی تو گوگل سرچ کن خیلی چیزا در موردش پیدا می کنی

mmd2009
پنج شنبه 09 آبان 1392, 02:00 صبح
با سلام

اگر واقعا نمی خواهید از list استفاده کنید میتونید از Array.Resize (http://msdn.microsoft.com/en-us/library/bb348051.aspx) استفاده کنید و هربار اندازه ی آرایه رو به اون چیزی که میخواهید تغییر بدید ، مثلا بدین شکل :


int[] myDynamicArrayInts = {};

for (int i = 0; i < 100; i++)
{
Console.WriteLine(myDynamicArrayInts.Length);
if (i == 54)
break;
Array.Resize(ref myDynamicArrayInts, myDynamicArrayInts.Length+1);
myDynamicArrayInts[i] = i;
}


در مثال بالا من گفتم هر بار به عدد 54 رسید حلقه رو بشکنه ، شما میتونید حلقه رو هرطور که دوست دارید تعریف کنید و مقدار شرط رو هم بذارید اون چیزی که مد نظرتون هست

موفق باشید