Want to sort strings in a collection array, any idea??? |
|
Author |
Message |
vcboy

|
Posted: Visual C# Language, Want to sort strings in a collection array, any idea??? |
Top |
Hi,
I am a beginner in C# and want to sort the strings in a collection array. Can you please give me which collection array class one will fit with my requirement
Thanks,
vcboy
Visual C#16
|
|
|
|
 |
Ala Kushlaf

|
Posted: Visual C# Language, Want to sort strings in a collection array, any idea??? |
Top |
The easiest way is to use generics I guess and it's very efficient and strongly typed..here is a sample code take a look at it
Add this to the namespaces
using System.Collections.Generic;
List <string> ls = new List<string>();
ls.Add("Small");
ls.Add("Large");
ls.Sort();
foreach (string s in ls)
{
MessageBox.Show(s);
}
Good Luck
|
|
|
|
 |
James Curran

|
Posted: Visual C# Language, Want to sort strings in a collection array, any idea??? |
Top |
If you are still using .Net 1.1 (and can't use generics), you can use ArrayList, which also has a Sort() method (Oddly, neither StringCollection nor StringDictionary does)
|
|
|
|
 |
Nimrand

|
Posted: Visual C# Language, Want to sort strings in a collection array, any idea??? |
Top |
There's also Array.Sort :-).
|
|
|
|
 |
vcboy

|
Posted: Visual C# Language, Want to sort strings in a collection array, any idea??? |
Top |
Thanks. I got it. But the string objects have keys attached to them. So I like to sort them both string and keys as they are associated. But ArrayList has sort() function but it will only sort the string objects and leaving keys associated to the strings. Any idea, please
Thanks,
vcboy
|
|
|
|
 |
Nimrand

|
Posted: Visual C# Language, Want to sort strings in a collection array, any idea??? |
Top |
I have an idea of what you're trying to do, but I think you're going to need to explain it in more detail. How do these string objects have keys associated with them
|
|
|
|
 |
James Curran

|
Posted: Visual C# Language, Want to sort strings in a collection array, any idea??? |
Top |
OK, Quick & Dirty:
Create a Hashtable & an arraylist. Put the string & data into the hashtable, the string by itself into the arraylist. Sort the Arraylist. USe the arraylist to pluck data out of the hashtable:
Hashtable ht = ... ArrayList al = .... foreach (.....) ht[str] = data; al.Add(str);
al.Sort() foreach(string str in al) data = ht[str];
The right way:
Define a new class which holds both the string & the data. Implement IComparable. Define the CompareTo method as "return this.Name.CompareTo(obj.Name);"
|
|
|
|
 |
vcboy

|
Posted: Visual C# Language, Want to sort strings in a collection array, any idea??? |
Top |
Ok, let's say I want to manipulate grocery list and their quantities like below:
Items quantity
Pear 29
Apple 3
Orange 8
I like to sort the items in alphabetically but their quantities will also be associated after sorting. I think it makes sense.
Thanks,
vcboy
|
|
|
|
 |
ahsankhan

|
Posted: Visual C# Language, Want to sort strings in a collection array, any idea??? |
Top |
There is a Array.Sort function that takes a key and value array as arguments. For example:
string [] applicationNames = ...
string [] applicationIDs = ...
Array.Sort( applicationNames, applicationID, null);
Please check link http://msdn2.microsoft.com/en-us/library/2b9cyk6x.aspx
|
|
|
|
 |
Luke D

|
Posted: Visual C# Language, Want to sort strings in a collection array, any idea??? |
Top |
The generic Array.Sort is great.
using Pair = KeyValuePair<string, MyCustomObject>;
class Program {
// Compares two Pairs public static int Compare( Pair lhs, Pair rhs ) { return lhs.Key.CompareTo( rhs.Key ); }
static void Main( string[] args ) { Pair[] array = new Pair[10];
// ... // Add your pairs here // ...
// Uses the named delegate to do the comparison System.Array.Sort( array, Compare );
// Uses anonymous delegate to do the comparison. System.Array.Sort( array, delegate( Pair lhs, Pair rhs ) { return lhs.Key.CompareTo( rhs.Key ); } ); } }
The Pair contains both your key, and your values, no class required. The key and value can be any type, here I'm using string and MyCustomObject, but they could both be custom types.
Then in the sort function, you just pass a delegate that can compare two of the key types and return an int telling if the left pair is less-than, greater-than, or equal to the right pair. I'm just forwarding to testing the left and the right keys agains each other.
Note that the delegate can be either named or anonymous, it just needs to match the Comparison<T> delegate (essentially a function of the form "int Foo<T>( T t1, T t2 )").
I like this solution the most because it requires a minimum of extra work, and is totally flexible.
Hope this helps someone. Luke
|
|
|
|
 |
|
|