已排序的List <string> </string>中的部分键匹配

时间:2011-03-01 14:58:14

标签: .net algorithm optimization search

假设我有一个像{"a1", "a2", "b0", "b2", "c1", ...}这样的字符串的排序列表,并且想要确定从“b”开始的第一个元素的索引。在.NET 4中获取它的最快方法是什么?记忆不是问题。

2 个答案:

答案 0 :(得分:3)

使用此:

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

如果你的名单很大并且表现有问题,那么请考虑Joel Rondeau在你对你的问题的评论中所指出的可能重复的答案。

答案 1 :(得分:0)

如果“最快”意味着“最容易实施”,那么

大致像这样:

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"));

或者使用F#中的Seq module(警告,我从未尝试过使用C#中的这些......这种语法可能不对。):

Seq.findIndex(s => s.StartsWith("b"))(strings);