PDA

View Full Version : تعریف نوع داده



gelayor14
دوشنبه 30 دی 1392, 15:58 عصر
سلام
تو یه برنامه ای می خوام یه نوع شبیه آرایه داشته باشم که مقدارش معلوم نیست در اول کار ..و در آخر کار..
و چند تا مقدار داره این که مرحله به مرحله با تولید عدد تصادفی بهش باید بدم
و نهایتا روی اون ها عملیاتی انجام بده
بجز آرایه با چه نوعی می شه این ساختار رو پیاده کرد؟
آیا میشه اندازه آرایه چند بعدی تا آخرش مشخص نباشه؟
ممنون میشم راهنمایی بفرمایید

rasol_afkham
دوشنبه 30 دی 1392, 20:02 عصر
اگر مقداری که می خواهی در آرایه ذخیره بشه، از یک نوع خاص باشه، برای مثال int یا byte و یا هر نوع دیگری و بخواهی که اندازه آرایه ات اضافه و کم بشه می تونی از کلاس Array برای افزایش و کاهش طول آرایه ات استفاده کنی


115670
T نوع آرایه
ref کلمه کلیدی که باید نوشته شود
arrayName نام آرایه شما
Size اندازه جدید آرایه
این دستور را می توانید در هر زمان برای افزایش و کاهش آرایه استفاده نمایید. فقط این را در نظر داشته باشید که با این کار شما به انتهای آرایه خانه اضافه می کنید و در زمان کاهش هم از انتهای آرایه عنصر و یا عناصری را حذف می کنید.
اگر مقداری را که می خواهید از داخل آرایه حذف نمایید در عنصر آخر آرایه قرار ندارد و بخواهید عنصری را از اول و یا وسط و یا هر مکانی به غیر از آخر آرایه حذف نمایید، باید از لیست پیوندی استفاده نمایید. اول باید فضای نام
using System.Collections;
را به برنامه اضافه نموده و متغیری از نوع ArrayList تعریف نمایید و با استفاده از تابع Add این کلاس می توانید هر متغیر دیگری را به این لیست پیوندی اضافه نمایید. دقت نمایید که هر مقداری را که این لیست پیوندی اضافه نمایید به صورت یک مقدار Object در لیست پیوندی ذخیره می شود و در زمان استفاده از آن باید آن را به متغیری که در اول کار بوده بر گردانید. برای مثال اگر متغیری از نوع int را در این لیست قرار دهید و بخواهید که از آن استفاده نمایید باید اول شماره اندیس آن را بدانید وبا استفاده از شماره اندیس آن، آن را به متغیر جدید نسبت دهید و آن را به نوع int تبدیل نمایید. با استفاده از تابع Remove می توانید هر عضوی که در این لیست قرار دارد را حذف نمایید، این تابع مقداری از نوع Object را می پذیرد. با تابع RemoveAt می توانید هر عنصری را از لیست با دانستن شماره اندیس آن حذف نمایید. شماره اندیس لیست پیوندی بعد از حذف عنصری از آن به صورت خودکار مرتب می شود. با استفاده از تابع RemoveRange می توانید تعدادی عنصر را با دادن شماره اندیس عنصر و تعداد عناصری که می خواهید از لیست حذف شود حذف نمایید.
با استفاده از جدول مخلوط یا همان Hashtable می توانید لیست پیوندی ایجاد نمایید. این نوع لیست پیوندی با لیست پیوندی ArrayList یک تفاوت دارد و آن هم این است که باید به همراه متغیری که به این لیست می فرستید متغیری هم به عنوان شناسه به آن بفرستید. شناسه باید یکتا باشد، یعنی مقدار تکراری نداشته باشد. با کمک شناسه به راحتی به عنصری که می خواهید دسترسی دارید.
حال اگر بخواهید خود یک نوع تعریف نمایید باید از ساختمان ها استفاده نمایید. با کلمه کلیدی struct می توانید یک ساختمان تعریف نمایید. این ساختمان می تواند هر عنصری داشته باشد و حتی می تواند یک آرایه یا لیست پیوندی و یا جدول مخلوط و حتی ساختمانی دیگر داشه باشد. می توانید متغیری از این نوع را تعریف نمایید. به صورت یک آرایه و یا یک لیست پیوندی ایجاد نمایید و یا ساختمانی را که ایجاد کرده اید را در این لیست پیوندی و یا جدول مخلوط قرار دهید.


115672

مهرداد صفا
دوشنبه 30 دی 1392, 20:52 عصر
با سلام.
aRRAYlIST (http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k%28SYSTEM.COLLECTIONS.ARRAYLIST%29;k%28VS.OBJEC TBROWSER%29;k%28TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22%29&rd=true)
sORTEDlIST (http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k%28%22SYSTEM.COLLECTIONS.SORTEDLIST.%23CTOR%22% 29;k%28VS.OBJECTBROWSER%29;k%28TargetFrameworkMoni ker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22%29&rd=true)
cOLLECTIONbASE (http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k%28SYSTEM.COLLECTIONS.COLLECTIONBASE%29;k%28VS. OBJECTBROWSER%29;k%28TargetFrameworkMoniker-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22%29&rd=true)
lIST<T> (http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k%28%22SYSTEM.COLLECTIONS.GENERIC.LIST%601%22%29 ;k%28VS.OBJECTBROWSER%29;k%28TargetFrameworkMonike r-%22.NETFRAMEWORK%2cVERSION%3dV4.0%22%29&rd=true)
...
...
...

gelayor14
دوشنبه 07 بهمن 1392, 15:38 عصر
باتشکر از راهنماییتون
من در نهایت یه کلاس گذاشتم و
بعد از کلاسم یه لیست تعریف کردم الان در دسترسی به عناصر لیست دچار مشکل شدم ..میخوام هر عنصر لیست اندیس داشته باشه توی یه حلقه (با در نظر گرفتن اینکه تعداد عناصر نامعلومه) مرحله به مرحله پارامتر ها رو دریافت کنه
الان چی باید تعریف کنم که اندیس بزارم برای عناصرم و مقدار بهشون بدم ?
عملیات Boxing , unboxing باید انجام بدم؟
از ToArray() استفاده کنم
ایندکسر تعریف کنم؟
یاکلا نباید لیست رو استفاده می کردم؟
ممنون میشم راهنمایی بفرمایید

public class Khodro
{

private int leave_City;
public int Leave_City
{
get { return leave_City; }
set { leave_City = value; }
}
private int arrival_City;
public int Arrival_City
{
get { return arrival_City; }
set { arrival_City = value; }
}
}


private void btnStartSimul_Click(object sender, EventArgs e)
{
lblStart.Text = DateTime.Now.ToString();
timer1.Enabled = true;
timer1.Interval = 1000;
timer1.Start();
List<Khodro> khodroha = new List<Khodro>();


while (Num_khodroha <= 5000)
{
foreach (var i in khodroha)
{
khodroha[i].Leave_City = Random[5, 35];

}


}
}
}
http://upload7.ir/imgs/2014-01/69089348770167987333.png

rasol_afkham
دوشنبه 07 بهمن 1392, 18:48 عصر
شما می خواهید که مقدار i در khodroha جستجو شود در حالی که i از نوع عدد صحیح است و khodroha یک نوع از کلاس Khoro است. پس شما باید داخل این کلاس آرایه ای داشته باشید که هم نوع با i باشد تا بتواند مقادیر آن را با i مقایسه نماید. حال اگر خود khodroha یک آرایه باشد پس باید متغیر و یا خصوصیتی از این کلاس که هم نوع با i است را با آن مقایسه نمایید. در اینجا خصوصیت Leave_City می تواند با i مقایسه شود چون با i هم نوع است.
در ضمن Random یک کلاس است نه یک تابع. برای ایجاد یک عدد تصادفی بین دو مقدار اول شیعی از این کلاس ایجاد نمایید و بعد از تابع Next برای ایجاد یک عدد تصادفی استفاده نمایید.

gelayor14
سه شنبه 08 بهمن 1392, 08:54 صبح
شما می خواهید که مقدار i در khodroha جستجو شود در حالی که i از نوع عدد صحیح است و khodroha یک نوع از کلاس Khoro است. پس شما باید داخل این کلاس آرایه ای داشته باشید که هم نوع با i باشد تا بتواند مقادیر آن را با i مقایسه نماید. حال اگر خود khodroha یک آرایه باشد پس باید متغیر و یا خصوصیتی از این کلاس که هم نوع با i است را با آن مقایسه نمایید. در اینجا خصوصیت Leave_City می تواند با i مقایسه شود چون با i هم نوع است.
در ضمن Random یک کلاس است نه یک تابع. برای ایجاد یک عدد تصادفی بین دو مقدار اول شیعی از این کلاس ایجاد نمایید و بعد از تابع Next برای ایجاد یک عدد تصادفی استفاده نمایید.

ممنون
شما منظورتون این هست که بیام یه آرایه هم اضافه تعریف کنم؟یا مقادیر رو تو آرایه کپی کنم؟ درست متوجه شدم؟

بعد من تا انتهای برنامه اندازه آرایه رو ندارم !! چجوری بیام ارایه بزارم؟؟
بعد باید اول مقدار دهی کنم که خودم هر طور امتحان کردم نشد چجور مقدار بدم .؟؟؟که مشخص باشه این چندمیه ..اندیسش مشخص باشه؟؟؟

راجع به تابع رندوم هم مثل یه تابع نوشتم تو برنامه :
public int Random(int min, int max)
{
Random rnd = new Random();
return rnd.Next(min, max);

}

gelayor14
سه شنبه 08 بهمن 1392, 11:13 صبح
من سووالم رو یه جور دیگه مطرح می کنم
میشه روی لیستی که تعدادش مشخص نیست تو یه حلقه مقدار داد به عناصرش (اینجا با تابع رندوم) به طوریکه این اندیس هر عنصر اش مشخص باشه از 0 تا....؟
اگه میشه از چه حلقه ای باید استفاده کرد؟چجوری باید استفاده کرد؟اندیس رو چجوری براش قرار داد؟

اگه نه بجای کلاس و لیست چی باید تعریف کنم که این عملیات رو بشه روش انجام داد؟

gelayor14
سه شنبه 08 بهمن 1392, 17:50 عصر
عزیزان حرفی ، حدیثی ، نکته ای ،انتقادی چیزی....نبود؟
سوال اشتباهه و جواب نداره یا به سی شارپ نمیشه انجامش داد؟