performancecounters and IComparable/IComparer

S

SalamElias

Hi, I am creating an array of performancecounter objects and wondering if it
is possible to sort this array according to category Names.
I tried Array.Sort(AllCountersCategories) but it is erroring. I understood
that to be able to sort an array its contents should implement the
IComparable/IComparer interface.
So the question is how can we know if an object implements this interface or
not, the 2nd of course, any idea of how to sort this array containing
performance counters object according to category names?

Thanks
 
J

Jeroen Mostert

SalamElias said:
Hi, I am creating an array of performancecounter objects and wondering if it
is possible to sort this array according to category Names.
I tried Array.Sort(AllCountersCategories) but it is erroring. I understood
that to be able to sort an array its contents should implement the
IComparable/IComparer interface.

That's the most convenient way, but not necessary. Array.Sort() has
overloads for custom comparisons.
So the question is how can we know if an object implements this interface or
not,

That's easy: consult the documentation. You already know the interface isn't
implemented, since .Sort() gives an error.
the 2nd of course, any idea of how to sort this array containing
performance counters object according to category names?
Here's one way (in C# 3.0):

Array.Sort(counters, (c1, c2) => string.CompareOrdinal(c1.CategoryName,
c2.CategoryName));

If you don't actually need a sorted array but just want the elements in
sorted order (or you want to use the result to create a new collection),
it's even easier:

counters.OrderBy(c => c.CategoryName, StringComparer.Ordinal);

If you can't use C# 3.0:

Array.Sort(a, delegate(PerformanceCounter c1, PerformanceCounter c2) {
return string.CompareOrdinal(c1.CategoryName, c2.CategoryName); });
 
S

SalamElias

So many thanks, I will try the last option as I am working with C# 2.
In fact yesterday, I forgot tomention that I am working with a collection of
those objects and then I amp populating a hashtable which its keys and values
are objects.
I understood from documentation that hashtable can not be sorted? Am I
mistaken?
If yes, is thres any way to sort objects in a hash table in a way similar to
other collections.

Thanks
 
C

Cor Ligthert[MVP]

Salam,

The answer from Jeroen is of course greath.

However as soon as you want a sorted hashtable, start then looking to the
normal or generic version from the sorted list.

Cor
 
L

Linda Liu[MSFT]

Thanks Jeroen and Cor for your replies!

Hi Salam,
I understood from documentation that hashtable can not be sorted?

Yes, you're right. A hashtable could not be sorted. To get a "sorted
hashtable", you can use System.Collections.SortedList or
System.Collections.Generic.SortedList<TKey,TValue> as Cor has suggested.

The following comments are quoted from MSDN document:

"A SortedList element can be accessed by its key, like an element in any
IDictionary implementation, or by its index, like an element in any IList
implementation. A SortedList object internally maintains two arrays to
store the elements of the list; that is, one array for the keys and another
array for the associated values."

"The elements of a SortedList object are sorted by the keys either
according to a specific IComparer implementation specified when the
SortedList is created or according to the IComparable implementation
provided by the keys themselves. In either case, a SortedList does not
allow duplicate keys."

For more information on the SortedList and SortedList<TKey,TValue> classes,
please refer to the following MSDN documents:

http://msdn.microsoft.com/en-us/library/system.collections.sortedlist(VS.85)
.aspx
http://msdn.microsoft.com/en-us/library/ms132319(vs.80).aspx

Hope this helps.
If you have any question, please feel free to let me know.

Sincerely,
Linda Liu
Microsoft Online Community Support

Delighting our customers is our #1 priority. We welcome your comments and
suggestions about how we can improve the support we provide to you. Please
feel free to let my manager know what you think of the level of service
provided. You can send feedback directly to my manager at:
(e-mail address removed).

==================================================
Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/subscriptions/managednewsgroups/default.aspx#notif
ications.

Note: The MSDN Managed Newsgroup support offering is for non-urgent issues
where an initial response from the community or a Microsoft Support
Engineer within 1 business day is acceptable. Please note that each follow
up response may take approximately 2 business days as the support
professional working with you may need further investigation to reach the
most efficient resolution. The offering is not appropriate for situations
that require urgent, real-time or phone-based interactions or complex
project analysis and dump analysis issues. Issues of this nature are best
handled working with a dedicated Microsoft Support Engineer by contacting
Microsoft Customer Support Services (CSS) at
http://msdn.microsoft.com/subscriptions/support/default.aspx.
==================================================
This posting is provided "AS IS" with no warranties, and confers no rights.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top