Windows Vista Forums
Vista Forums Home Join Vista Forums Windows 7 Forum Vista Tutorials Tags
Welcome to Windows Vista Forums. Our forum is dedicated to helping you find solutions with any problems, errors or issues you are experiencing with Windows Vista. The Vista forum also covers news and updates and has an extensive Windows Vista tutorial section that covers a wide range of tips and tricks.

Go Back   Vista Forums > Misc Newsgroups > .NET General

Vista - performancecounters and IComparable/IComparer

Reply
 
Old 05-16-2008   #1 (permalink)
SalamElias


 
 

performancecounters and IComparable/IComparer

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

My System SpecsSystem Spec
Old 05-16-2008   #2 (permalink)
Jeroen Mostert


 
 

Re: performancecounters and IComparable/IComparer

SalamElias wrote:
Quote:

> 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.
Quote:

> 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.
Quote:

> 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); });

--
J.
http://symbolsprose.blogspot.com
My System SpecsSystem Spec
Old 05-17-2008   #3 (permalink)
SalamElias


 
 

Re: performancecounters and IComparable/IComparer

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

"Jeroen Mostert" wrote:
Quote:

> SalamElias wrote:
Quote:

> > 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.
>
Quote:

> > 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.
>
Quote:

> > 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); });
>
> --
> J.
> http://symbolsprose.blogspot.com
>
My System SpecsSystem Spec
Old 05-17-2008   #4 (permalink)
Cor Ligthert[MVP]


 
 

Re: performancecounters and IComparable/IComparer

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

"SalamElias" <eliassal@xxxxxx> schreef in bericht
news:2FAC9D28-883F-4A8B-96AD-50295FA1CC4B@xxxxxx
Quote:

> 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
>
> "Jeroen Mostert" wrote:
>
Quote:

>> SalamElias wrote:
Quote:

>> > 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.
>>
Quote:

>> > 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.
>>
Quote:

>> > 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); });
>>
>> --
>> J.
>> http://symbolsprose.blogspot.com
>>
My System SpecsSystem Spec
Old 05-19-2008   #5 (permalink)
Linda Liu[MSFT]


 
 

Re: performancecounters and IComparable/IComparer

Thanks Jeroen and Cor for your replies!

Hi Salam,
Quote:

>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/libr...rtedlist(VS.85)
.aspx
http://msdn.microsoft.com/en-us/libr...19(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:
msdnmg@xxxxxx.

==================================================
Get notification to my posts through email? Please refer to
http://msdn.microsoft.com/subscripti...ult.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/subscripti...t/default.aspx.
==================================================
This posting is provided "AS IS" with no warranties, and confers no rights.


My System SpecsSystem Spec
Reply

Thread Tools


Similar Threads
Thread Forum
Any way(s) to pass an IComparer object instance to ArrayList.sort? PowerShell


Vista Forums is an independent web site and has not been authorized,
sponsored, or otherwise approved by Microsoft Corporation.
"Windows Vista", the Start Orb, and related materials are trademarks of Microsoft Corp.
© Designer Media Ltd

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46