LINQ-এর Max, Min, OrderByDescending, OrderBy মেথড ব্যবহার করে লিস্ট বা অ্যারে থেকে চাহিদামতো মান সহজে বের করা যায়।
পদ্ধতি
var numbers = new[] { 99, 35, 26, 87 };
int max = numbers.Max(); // সর্বোচ্চ
int min = numbers.Min(); // সর্বনিম্ন
int secondMax = numbers.OrderByDescending(x => x).Skip(1).First(); // ২য় সর্বোচ্চ
int secondMin = numbers.OrderBy(x => x).Skip(1).First(); // ২য় সর্বনিম্ন
সম্পূর্ণ উদাহরণ
using System;
using System.Linq;
class MinMaxDemo
{
public static void Main()
{
var val = new[] { 99, 35, 26, 87 };
Console.WriteLine("সর্বোচ্চ: " + val.Max());
Console.WriteLine("সর্বনিম্ন: " + val.Min());
Console.WriteLine("২য় সর্বোচ্চ: " + val.OrderByDescending(x => x).Skip(1).First());
Console.WriteLine("২য় সর্বনিম্ন: " + val.OrderBy(x => x).Skip(1).First());
// ডুপ্লিকেট থাকলে Distinct() ব্যবহার করুন
var withDup = new[] { 5, 5, 3, 3, 2 };
Console.WriteLine("ডুপ্লিকেটসহ ২য় সর্বোচ্চ: " + withDup.Distinct().OrderByDescending(x => x).Skip(1).First());
}
}
আউটপুট
সর্বোচ্চ: 99
সর্বনিম্ন: 26
২য় সর্বোচ্চ: 87
২য় সর্বনিম্ন: 35
ডুপ্লিকেটসহ ২য় সর্বোচ্চ: 3
পারফরম্যান্স নোট
Max/Min: O(n) — এক পাসOrderBy + Skip + First: O(n log n) — সর্টিং দরকার- বড় ডেটাসেটের জন্য সিংগেল পাস অ্যালগরিদম (ম্যানুয়াল লুপ) দ্রুত।
সিংগেল পাস অ্যালগরিদম (O(n), কোনো সর্টিং নেই)
int max = int.MinValue, secondMax = int.MinValue;
int min = int.MaxValue, secondMin = int.MaxValue;
foreach (int n in numbers)
{
if (n > max) { secondMax = max; max = n; }
else if (n > secondMax && n != max) secondMax = n;
if (n < min) { secondMin = min; min = n; }
else if (n < secondMin && n != min) secondMin = n;
}