Частичное совпадение ключей в отсортированном списке <string> - PullRequest
1 голос
/ 01 марта 2011

Скажем, у меня есть отсортированный список строк, например {"a1", "a2", "b0", "b2", "c1", ...}, и я хочу определить индекс первого элемента, начиная с "b". Какой самый быстрый способ получить его в .NET 4? Память не проблема.

Ответы [ 2 ]

3 голосов
/ 01 марта 2011

Используйте это:

var list = new List<string> { "a1", "a2", "b0", "b2", "c1" };
int index = list.FindIndex(x => x.StartsWith("b"));

Если ваш список огромен, а производительность - это проблема, рассмотрите ответ в возможном дубликате, как отметил Джоэл Рондо в своем комментарии к вашему вопросу.

0 голосов
/ 01 марта 2011

Если для «самого быстрого» вы имеете в виду «проще всего реализовать», то

Примерно так:

static int FirstIndex(this IEnumerable<T> coll, Predicate<T> pred)
{
    var it = coll.GetEnumerator();

    int index = 0;

    while(it.MoveNext())
    {
        if(pred(it.Current))
        {
           return index;
        }
        index++;
    }

     throw new ObjectNotFoundException();
}    

{"a1", "a2", "b0", "b2", "c1"}.FirstIndex(s => s.StartsWith("b"));

Или с помощью модуля Seq из F # (предостережение, я никогда не пытался использовать их из C # ... этот синтаксис, вероятно, неправильный.):

Seq.findIndex(s => s.StartsWith("b"))(strings);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...