ArrayList Поиск .net - PullRequest
       8

ArrayList Поиск .net

2 голосов
/ 20 января 2010

Ниже приведен формат данных, хранящихся в моем массиве.

A-Amsterdam
B- Brussels
C-Canada

и т. Д. Я хочу искать в моем списке массивов, передавая только первые несколько символов до '-' Поэтому, если у меня есть что-то вроде AA-Test, тогда я хочу пройти только «AA», чтобы проверить, существует он или нет.

Я знаю, что я могу использовать содержит или двоичный поиск, но это не служит моей цели, поскольку они оба сравнивают объекты.

Есть предложения? спасибо

Ответы [ 2 ]

2 голосов
/ 20 января 2010

Вы можете решить эту проблему, создав собственный IComparer и передав его в 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);
    }
}

Позже ...

myArrayList.Sort()
myArrayList.BinarySearch("AA", new StartsWithComparer());
0 голосов
/ 20 января 2010

Вы можете принять во внимание размер массива и количество поисков, которые вы будете выполнять:

Если в вашем наборе данных имеется большое количество элементов (большой массив массивов)) или при большом количестве поисков, вы захотите использовать алгоритм поиска, такой как бинарный поиск

Если данные достаточно велики, вы можете хранить свои данные в хеш-таблице, индексированной по первым нескольким символам, которыевы хотите получить к нему доступ («AA» в вашем примере).

Наконец, для небольшого размера массива и большого числа поисков вы можете обнаружить, что использование одной и той же функции сравнения с линейным поиском фактически выполняетлучше.Это обсуждалось здесь далее: При каком n двоичный поиск становится быстрее, чем линейный поиск на современном CPU?

...