12,356,455 members (66,852 online)
Tip/Trick
alternative version

8.4K views
3 bookmarked
Posted

# Get the Nth Minimum or Nth Maximum Number from a Collection C#

, 21 Apr 2014 CPOL
 Rate this:
Get the Nth Minimum or Nth Maximum Number from a Collection C#

## Introduction

For a collection of integers/decimals, we can use the `.Max() `and `.Min() `to get the maximum and minimum value of the collection respectively.

However, there are two more case scenarios that I have faced, which I am going to discuss next. Following is the definition of a class `Item `that I am going to use here:

```class Item: IComparable<Item>
{
public string itemName { get; set; }
public int itemPrice { get; set; }

int IComparable<item>.CompareTo(Item other)
{
if (other.itemPrice > this.itemPrice)
return -1;
else if (other.itemPrice == this.itemPrice)
return 0;
else
return 1;
}

public static bool operator >(Item X, Item Y)
{
if (X == null && Y == null)
{
return false;
}
if (X == null)
{
return false; //true?
}
if (Y == null)
{
return true; //false?
}

return X.itemPrice > Y.itemPrice;
}

public static bool operator <(Item X, Item Y)
{
if (X == null && Y == null)
{
return false;
}
if (X == null)
{
return true; //false?
}
if (Y == null)
{
return false; //true?
}

return X.itemPrice < Y.itemPrice;
}
}```

Populate some value to the collection:

```Item[] items = { new Item { itemName="Item1", itemPrice=10 },
new Item { itemName="Item2", itemPrice=20 },
new Item { itemName="Item3", itemPrice=30 },
new Item { itemName="Item4", itemPrice=40 } };```

Get the Minimum number greater than a certain value OR Maximum number lesser than a certain value:

```//get the minimum valued item = Item1
int min = items.Min().itemPrice;

//get the min valued item greater than the 2nd item = Item3
int min = items.Where(p => p > items[1]).DefaultIfEmpty().Min().itemPrice);

//get the maximum valued item = Item4
int min = items.Max().itemPrice;

//get the max valued item less than the 3rd item = Item2
int min = items.Where(p => p < items[2]).DefaultIfEmpty().Max().itemPrice);```

Similarly, we can also get the element at each index:

```Item secondLowest = numbers.OrderBy(num => num).ElementAt(1);
Item secondHighest = numbers.OrderBy(num => num).Reverse().ElementAt(1);```

CodeProject

## Share

 Software Developer India
No Biography provided

## You may also be interested in...

 First Prev Next
 My vote of 3 mcooper198422-Apr-14 4:21 mcooper1984 22-Apr-14 4:21
 Re: My vote of 3 piyush_singh24-Apr-14 0:16 piyush_singh 24-Apr-14 0:16
 Another Suggestion. George Swan21-Apr-14 3:58 George Swan 21-Apr-14 3:58
 Re: Another Suggestion. piyush_singh21-Apr-14 20:02 piyush_singh 21-Apr-14 20:02
 Re: Another Suggestion. George Swan21-Apr-14 22:43 George Swan 21-Apr-14 22:43
 Re: Another Suggestion. piyush_singh24-Apr-14 0:12 piyush_singh 24-Apr-14 0:12
 Last Visit: 31-Dec-99 18:00     Last Update: 29-Jun-16 8:35 Refresh 1