PDA

View Full Version : پیشنهاد برای استفاده از list



NIMA_1981
شنبه 05 آذر 1390, 15:17 عصر
سلام دوستان یک راهنمای می خواستم
من یک سری نقطه دارم که توی یک لسیت ذخیره میشه انجوری

List<Point> gpoints = new List<Point>(){

new Point(10, 10),
new Point(15, 10),
new Point(20, 10),
new Point(42, 42),
new Point(47, 11)
};


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

mmd2009
شنبه 05 آذر 1390, 16:40 عصر
با سلام

اگر منظورتون اینه که اطلاعات درون چند کلاس مختلف ذخیره هستند و بعد از هر بار new کردن کلاسی که این نقاط داخلوش هستند به حالت 0 میرن تعداد کافیه به صورت زیر فراخوانی بکنید :


public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
var dPoint=new Point(20,30);
ListPoint.Gpoints.Add(dPoint);
MessageBox.Show(ListPoint.Gpoints.Count.ToString() );
}

}

public class ListPoint
{
public static List<Point> Gpoints = new List<Point>
{

new Point(10, 10),
new Point(15, 10),
new Point(20, 10),
new Point(42, 42),
new Point(47, 11)
};
}


یا اگر هم یک لیست ثابت داری در کلاس اصلیت و میخوای به دیگر کلاس ها پاسش بدی ولی مقدار خودش تغییری نکنه کافیه به این صورت بنویسی کدهات رو :



public List<Point> Gpoints = new List<Point>
{

new Point(10, 10),
new Point(15, 10),
new Point(20, 10),
new Point(42, 42),
new Point(47, 11)
};

private void button1_Click(object sender, EventArgs e)
{
var listPoint = new ListPoint {DPoint = new List<Point>(Gpoints)};

var dPoint = new Point(20, 30);

listPoint.DPoint.Add(dPoint);

var listPoint2 = new ListPoint2 {DPoint = new List<Point>(Gpoints)};

var listPoint3 = new ListPoint3 { DPoint = new List<Point>(Gpoints) };

var dPoint1 = new Point(20, 30);
var dPoint2 = new Point(20, 30);
listPoint3.DPoint.Add(dPoint1);
listPoint3.DPoint.Add(dPoint2);

MessageBox.Show(listPoint.DPoint.Count.ToString()) ;

MessageBox.Show(listPoint2.DPoint.Count.ToString() );

MessageBox.Show(listPoint3.DPoint.Count.ToString() );

MessageBox.Show(Gpoints.Count.ToString());
}
}

public class ListPoint
{
public List<Point> DPoint { get; set; }
}

public class ListPoint2
{
public List<Point> DPoint { get; set; }
}

public class ListPoint3
{
public List<Point> DPoint { get; set; }
}


موفق باشید

NIMA_1981
یک شنبه 06 آذر 1390, 00:35 صبح
ببینید من ساده تر بگم - من یک یری شکل دارم که هر کدوم از یک سری مختصات x,y ساخته میشه مثلا یک شکا شامل 10 نقطه هست ممکنه یکی دیگه شامل 100 نقطه باشه حالا میخوام هر به هر کدوم از این شکل ها با یک شماره یا کلید دسترسی داشته باشم مثل آریه دو بعدی یا یخ چیز شبه این که وقتی شکل یک را خواستم - تمام مجموعه نقاط رو بصورت آرایه در آختیار من قرار بده

با تشکر

sali444
یک شنبه 06 آذر 1390, 01:56 صبح
List<Point> gpoints = new List<Point>();

Point pt = new Point(10, 10);
gpoints.add(pt);



به این شکل اضافه می کنیم.
خط دو و سه رو بذار تو حلقه و 10،10 رو هم متغییر بذار.......

NIMA_1981
یک شنبه 06 آذر 1390, 02:24 صبح
ببین pt برای من محموع جند تا نقطه هست اینجوری


new Point(10, 10),
new Point(15, 10),
new Point(20, 10),
new Point(42, 42),
new Point(47, 11)


حالا مثلا وقتی بنویسم gpoints[1] باید تمام نقاط بالا رو بصورت آرایه بده - این کد این جوری کار میکنه

NIMA_1981
یک شنبه 06 آذر 1390, 02:29 صبح
فکر کنم کد شما هر نفطه را بصورت جدا گانه ذخیره میکنه

mmd2009
یک شنبه 06 آذر 1390, 03:35 صبح
با سلام

خب به نظر من از Dictionary استفاده کنید. اگر منظور شمارو درست متوجه شده باشم شما میگید که فرضا 4 تا مختصات دارید به نام های یک و دو و سه و چهار جالا اگر زدید مختصات 4 بیاد چهارو بهتون نشون بده. شاید بشه به اندیکس گذاری اینو حل کرد ولی خب درصد اشتباهش میره بالا ولی اگر به صورت Dictionary بنوسید خب مطمئنا با دستور Single میتونید خیلی راحت مختصات مورد نظر رو پیدا بکنید و ازش استفاده بکنید

فرضا این کد رو ببینید :


var coordinate = new Dictionary<string, Point>
{
{"coordinate One", new Point(20, 20)},
{"coordinate two", new Point(30, 15)},
{"coordinate There", new Point(40, 20)},
{"coordinate Four", new Point(50, 40)}
};

// Find : coordinate There
var q = coordinate.Single(d => d.Key == "coordinate There").Value;

MessageBox.Show(string.Format(" X : {0} and Y : {1} ", q.X, q.Y));


امیدوارم مثال خوبی زده باشم. اگر منظورتون چیز دیگه ای بود بگید که بهتر راهنمایی بکنیم

موفق باشید

NIMA_1981
یک شنبه 06 آذر 1390, 04:25 صبح
ببینید دوست عزیز فرض کنید که
شکل اول :
new Point(15, 10), new Point(20, 10),
new Point(42, 42),
new Point(47, 11)
شکل دوم:
new Point(125, 30), new Point(120, 30),
new Point(12, 42),
new Point(47, 61)


حالا میهوام وقتی لیست یا آرایه یا هرچیزی را با ایندکس 1 صدا میزنم اون 4 تا مختصات اول رو بده وقتی با ایندکس 2 صدا میزنم 4 تا مختصات دوم رو بده

sali444
یک شنبه 06 آذر 1390, 11:50 صبح
می خوای gpoint[1] سه چهارتاشو با هم بده؟ فک نکنم با پوینت بشه.
شما پنجتا نقطه داری و ماهیت هر کدوم از اونها با هم جداست . . .

باید کلاس بنویسی واسش... با کلاس میشه..........

NIMA_1981
یک شنبه 06 آذر 1390, 13:52 عصر
تعداد نقطه ها متفاوته ممکنه یک دونه باشه ممکنه 1000 تا ولی باید همشون توی یک گروه باشه و هر وقت هم که خواستم بصورت یک لیست و آرایه به این نقطه ها دسترسی داشته باشم

محمد فدوی
یک شنبه 06 آذر 1390, 14:38 عصر
نمی دونم درست فهمیدم یا نه. این مشکلتونو حل نمی کنه؟! :متفکر:


List<Point[]> lst = new List<Point[]>() ;
Point[] first = new Point[] { new Point(10, 10), new Point(20, 20),
new Point(30, 30), new Point(40, 40) };
lst.Add(first);


الان شئ اول موجود در lst یک آرایه ی یک بعدی با طول چهاره...
درست فهمیدم؟! :لبخند:

NIMA_1981
یک شنبه 06 آذر 1390, 16:59 عصر
مرسی دوست عزیز با راه حل شما مشکلم حل شد - با تشکر