PDA

View Full Version : سوال: اضافه کردن مقادیر لیست به ارایه



alish123456
چهارشنبه 15 فروردین 1397, 18:56 عصر
سلام به همگی..
من یه لیست (از نوع اینتیجر) دارم که مقادیری داخلش وجود داره


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

حالا من میخوام هر مقدار اینو به ارایه دو بعدی خودم اضافه کنم


int[][] A = new int[][] { list.ToArray() };

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

خب پس به این صورت حل میشه:

int[] x1 = list.ToArray();
int[][] A = new int[][] { new[] { x1[0] }, new[] { x1[1] }, new[] { x1[2] }, new[] { x1[3] } };



ولی خب (کد بالا) الان به صورت دستی این کارو کردم یعنی فقط 4 اندیس اولی لیست رو ریختم توی ارایه
چطور میتونم کل لیستم رو (حالا چه با حلقه و چه روش های دیگه) به این ارایه اضافه کنم.
یه مثال بزنید ممنون میشم!

مهرداد صفا
جمعه 17 فروردین 1397, 18:07 عصر
سلام.
با استفاده از متود Buffer.BlockCopy (https://msdn.microsoft.com/en-us/library/system.buffer.blockcopy(v=vs.110).aspx)
می تونید این کار رو بکنید.
البته این روش در مورد آرایه های دندانه ای جواب نمیده.
فرض می کنیم یک لیست با 25 عضو از int32 داریم که قصد داریم در یک آرایه 5 * 5 کپی کنیم:


var myList = Enumerable.Range(0, 25).ToList();
int[,] myArray = new int[5, 5];
Buffer.BlockCopy(myList.ToArray(), 0, myArray, 0, 25 * 4);


اون 4 هم به خاطر این هست که هر int شامل 4 بایت هست.

alish123456
جمعه 17 فروردین 1397, 19:51 عصر
سلام.
با استفاده از متود Buffer.BlockCopy (https://msdn.microsoft.com/en-us/library/system.buffer.blockcopy(v=vs.110).aspx)
می تونید این کار رو بکنید.
البته این روش در مورد آرایه های دندانه ای جواب نمیده.
فرض می کنیم یک لیست با 25 عضو از int32 داریم که قصد داریم در یک آرایه 5 * 5 کپی کنیم:


var myList = Enumerable.Range(0, 25).ToList();
int[,] myArray = new int[5, 5];
Buffer.BlockCopy(myList.ToArray(), 0, myArray, 0, 25 * 4);


اون 4 هم به خاطر این هست که هر int شامل 4 بایت هست.

با تشکر از شما.
در انجمن stackoverflow هم مطرح کردم همین سوال رو که کد زیر رو پیشنهاد دادن:

int[][] A =list.Select(i =>new[]{ i }).ToArray();
(برای کسایی که به این مشکل بر میخورن)

بازم ممنون.