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