3

Following is the format of the data stored in my arraylist.

A-Amsterdam
B- Brussels
C-Canada

so and so forth. I wan to search my array list by passing just the first few characters till '-' So if i have something like AA-Test then i want to pass just 'AA' to check if it exists or not.

I know that i can use contains or binarysearch but it does not serve my purpose as they both compare objects.

Any suggestions?? thanks

2 Answers 2

2

You can solve this by creating your own IComparer and passing it into BinarySearch:

public class StartsWithComparer : IComparer
{
    public int Compare(Object x, Object y)
    {
        String left = x as String;
        String right = y as String;

        if (ReferenceEquals(left, right))
        {
            return 0;
        }

        if (ReferenceEquals(left, null))
        {
            return -1;
        }

        if (ReferenceEquals(right, null))
        {
            return 1;
        }

        return (x.StartsWith(y) || y.StartsWith(x)) ? 0 : x.CompareTo(y);
    }
}

Later...

myArrayList.Sort()
myArrayList.BinarySearch("AA", new StartsWithComparer());
Sign up to request clarification or add additional context in comments.

Comments

0

You may want to take into account the size of the arraylist and the number of lookups you'll be doing:

If you've got a large number of elements in your dataset, (a large arraylist) or a large number of lookups, you'll want to use a search algorithm like binary search

If the data is sufficiently large though, you may consider storing your data in a hashtable indexed by the first few characters that you want to access it by ('AA' in your example).

Lastly, for a small arraylist size and a large number of lookups, you may find that using the same comparer function with a linear search actually performs better. This has been discussed further here: At which n does binary search become faster than linear search on a modern CPU?

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.