Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
Solved

# Finding highest counter

Posted on 2006-11-21
Medium Priority
238 Views
Hello experts:
I need help with determining the highest counter.
I have a Windows C# application and I accumulate a bunch of counters.

Count1++
Count2++
Count3++
Count4++

How would I go about deterrmining which one has the highest value in the shortest statment possible so that I can

if count1 is highest do something
if count2 is highest do seomthing else
etc

Thanks
0
Question by:lancerxe
[X]
###### Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

• Help others & share knowledge
• Earn cash & points
• Learn & ask questions
• 5

LVL 22

Expert Comment

ID: 17988184

The method that uses the least amount of line space would be to use a function.

public void Main()
{

int count1;
int count2;
int count3;
int count4;

int highest = GetLargest(new int[] {count1, count2, count3, count4});
...
..
.
}

private int GetLargest(int[] vals)
{
int highest = int.minimum;

for(int i=0;i<vals.Length;i++)
if(vals[i]>highest)
highest = vals[i];

return highest;
}

0

LVL 22

Expert Comment

ID: 17988185

The method that uses the least amount of line space would be to use a function.

public void Main()
{

int count1;
int count2;
int count3;
int count4;

int highest = GetLargest(new int[] {count1, count2, count3, count4});
...
..
.
}

private int GetLargest(int[] vals)
{
int highest = int.minimum;

for(int i=0;i<vals.Length;i++)
if(vals[i]>highest)
highest = vals[i];

return highest;
}

0

LVL 22

Expert Comment

ID: 17988187

The method that uses the least amount of line space would be to use a function.

public void Main()
{

int count1;
int count2;
int count3;
int count4;

int highest = GetLargest(new int[] {count1, count2, count3, count4});
...
..
.
}

private int GetLargest(int[] vals)
{
int highest = int.minimum;

for(int i=0;i<vals.Length;i++)
if(vals[i]>highest)
highest = vals[i];

return highest;
}

0

LVL 16

Expert Comment

ID: 17988789
I suggest to create a new Counter class
like
class myCounter
{
const int MAX_COUNTER = 4;

private int[] mCounter= new int[MAX_COUNTER];
private int mMaxValue = int.MinValue;
private int mMaxCounterIndex = -1;

public myCounter()
{
int i;

for (i = 0; i < MAX_COUNTER; i++)
{
mCounter[i] = 0;
}
}

public void IncCounter(int aIndex)
{
if (aIndex > 0 && aIndex < MAX_COUNTER)
{
mCounter[aIndex]++;
if (mCounter[aIndex] > mMaxValue)
{
mMaxValue = mCounter[aIndex];
mMaxCounterIndex = aIndex;
}
}
}

public int maxCounterValue
{
get
{
return mMaxValue;
}
}

public int maxCounterIndex
{
get
{
return mMaxCounterIndex;
}
}
0

LVL 10

Accepted Solution

tpwells earned 1000 total points
ID: 17989761
if all your counters are of the ame type you can quickly add them to an ArrayList and sort the list. After sorting the last item in the ArrayList will be the highest number.

System.Collections.ArrayList arList= new System.Collections.ArrayList();
arList.Sort();
int top = (int)arList[arList.Count-1];
0

LVL 22

Expert Comment

ID: 17989948

I like tpwells' arraylist idea.... (same concept, abreviated code)

ArrayList arList = new ArrayList(new int[] {count1, count2, count3, count4});
arList.Sort();
int top = (int)arList[arList.Count-1];

0

LVL 22

Assisted Solution

_TAD_ earned 1000 total points
ID: 17990066

On the same vein, if all of the counters are of the same type, you could simply create an int[] and sort that array.

int[] myArray = new int[]{count1, count2, count3, count4};
Array.Sort(myArray);
int top = myArray[myArray.Length-1];

using this code does two things
1) It will make your memory footprint a bit smaller because it does not have to include the System.Collections library in memory.

2) The performance will be bette because it does not have to box and unbox your data.

This is not to detract from tpwells' solution (kudos to him for the idea).  The performance increase and memory footprint arguments are purely accademic.  (around 8 k of memory and < 0.3 ms of time is saved)
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Having new technologies does not mean they will completely replace old components.  Recently I had to create WCF that will be called by VB6 component.  Here I will describe what steps one should follow while doing so, please feel free to post any quâ€¦
Performance in games development is paramount: every microsecond counts to be able to do everything in less than 33ms (aiming at 16ms). C# foreach statement is one of the worst performance killers, and here I explain why.
Visualize your data even better in Access queries. Given a date and a value, this lesson shows how to compare that value with the previous value, calculate the difference, and display a circle if the value is the same, an up triangle if it increasedâ€¦
In this video, Percona Solution Engineer Rick Golba discuss how (and why) you implement high availability in a database environment. To discuss how Percona Consulting can help with your design and architecture needs for your database and infrastrâ€¦
###### Suggested Courses
Course of the Month5 days, 3 hours left to enroll

#### 670 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.