![]() |
![]() | ![]() | ![]() | ![]() | ![]() | ![]() | ![]() |
| 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. |
| |||||||
![]() |
| |
| | #1 (permalink) |
| | 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 Specs![]() |
| | #2 (permalink) |
| | 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. overloads for custom comparisons. Quote: > So the question is how can we know if an object implements this interface or > not, 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? > 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 Specs![]() |
| | #3 (permalink) |
| | 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? > > > > 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 Specs![]() |
| | #4 (permalink) |
| | 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? >> > >> >> 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 Specs![]() |
| | #5 (permalink) |
| | 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? 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 Specs![]() |
![]() |
| Thread Tools | |
| |
Similar Threads | ||||
| Thread | Forum | |||
| Any way(s) to pass an IComparer object instance to ArrayList.sort? | PowerShell | |||