PDA

View Full Version : Min و Max در یک آرایه دو بعدی



mehran_sh_t
سه شنبه 15 شهریور 1390, 11:20 صبح
سلام
یه آرایه دارم، double[][]
میشه روی ستونی از این آرایه min و max گرفت؟

mehdi.mousavi
سه شنبه 15 شهریور 1390, 12:30 عصر
سلام یه آرایه دارم، double[][] میشه روی ستونی از این آرایه min و max گرفت؟

سلام.
می تونید بدین شکل عمل کنید:

double[,] array = new double[3, 2] { { 10, 20}, { 30, 40}, {50, 60} };
double max = Enumerable.Range(0, array.GetLength(0)).Select(row => array[row, 1]).Max();

موفق باشید.

mehran_sh_t
سه شنبه 15 شهریور 1390, 23:47 عصر
ممنون از راهنماییتون.
ولی من نیاز دارم که به آرایه به صورت سطر به سطر دسترسی داشته باشم.
با این تعریف از آرایه دو بعدی امکانش هست؟ در واقع نمی خوام هر بار یک آرایه یک بعدی تعریف کنم و مقایر رو تو اون بریزم و ازش استفاده کنم.

(مجبورم سطر به سطر به یک تابع بدمش)

mehdi.mousavi
چهارشنبه 16 شهریور 1390, 10:25 صبح
ممنون از راهنماییتون. ولی من نیاز دارم که به آرایه به صورت سطر به سطر دسترسی داشته باشم. با این تعریف از آرایه دو بعدی امکانش هست؟ در واقع نمی خوام هر بار یک آرایه یک بعدی تعریف کنم و مقایر رو تو اون بریزم و ازش استفاده کنم. (مجبورم سطر به سطر به یک تابع بدمش)

سلام.
متوجه منظورتون نمیشم... اگر مایلید تا بدون Select کردن یک Column، بیشترین و کمترین مقدار رو در اون Column بدست بیارید (بدون استفاده از روشی که در بالا بهش اشاره کردم)، متاسفانه هیچ متودی برای این کار بصورت Built-in در LINQ وجود نداره. در مثال فوق نیز من Max رو در یک آرایه دو بعدی و در Column ای مشخص (ستون شماره دوم آرایه، که با عدد یک در بخش array[row, 1] مشخص شده) بدست آورده ام.

موفق باشید.

mehran_sh_t
چهارشنبه 16 شهریور 1390, 10:38 صبح
این چیزی که گفتم جدا از min و max بود.
ببینید، طبق گفته شما، از یک آرایه دو بعدی به صورت double[,] استفاده می کنم. در قسمتی از این برنامه، برای یک سری محاسبات، برای هر ستون نیاز دارم min و max رو بدست بیارم، که این با کد شما در پست اول حل شد.
حالا بعد از انجام محاسبات، هر سطر از این آرایه رو باید به یک تابع بدم، در واقع تابع یک آرایه یک بعدی double[] (که سطری از آرایه اول هستش) میگیره
اگر آرایه ام double[][] بود، به راحتی امکان پذیر بود. ولی با این آرایه جدید نمی دونم چطوریه...

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

double[] r = Enumerable.Range(0, input.GetLength(1)).Select(row => input[index, row]).ToArray();

اولا مطمئن نیستم، که این سطر index رو انتخاب می کنه یا نه. ؟
در ضمن این کد از نظر زمان و حافظه بهینه نیست! در double[][] به راحتی می شه به سطر ها دسترسی داشت. می خوام ببینم راهی هست که مثل این بشه بهش دسترسی داشت؟

mehdi.mousavi
چهارشنبه 16 شهریور 1390, 10:53 صبح
سلام.
ببینید، ما کلا سه مدل Array داریم:

double[] singleDimentionalArray = new double[3] { 1, 2, 3 };
double[,] multiDimentionalArray = new double[2, 3] { { 1, 2, 3 }, { 4, 5, 6 } };
double[][] jaggedArray = new double[2][] { new double[] { 1, 2 }, new double[] { 3, 4, 5 } };


به اولی میگیم آرایه یک بعدی، دومی آرایه چند بعدی (اینجا، 2) هستش و سومی رو بهش میگیم Jagged Array. ظاهرا شما مایلید تا آرایه ای از نوع سوم داشته باشید (درسته؟)
اگر اینطوره، کافیه تا برای بدست آوردن Min/Max در Jagged Array فوق بدین شکل عمل کنید:

double max = jaggedArray[0].Max();

و همونطوریکه خودتون هم فرمودید، اونوقت می تونید براحتی توسط Indexer به فلان ردیف از آرایه نیز برسید.

موفق باشید.

mehran_sh_t
شنبه 19 شهریور 1390, 20:39 عصر
با سلام دوباره :)
بله، دقیقا همین آرایه ای که مثال زدید منظورمه.
ولی کدی که قرار دادید، min و max رو در سطر حساب می کنه، در حالی که من برای هر ستون می خوام...
راهی وجود داره؟ فعلا که با همین حلقه ها نوشتمش