【发布时间】:2009-08-17 21:37:23
【问题描述】:
这是我写的:
public static class EnumerableExtensions
{
public static int IndexOf<T>(this IEnumerable<T> obj, T value)
{
return obj
.Select((a, i) => (a.Equals(value)) ? i : -1)
.Max();
}
public static int IndexOf<T>(this IEnumerable<T> obj, T value
, IEqualityComparer<T> comparer)
{
return obj
.Select((a, i) => (comparer.Equals(a, value)) ? i : -1)
.Max();
}
}
但我不知道它是否已经存在,是吗?
【问题讨论】:
-
Max方法的问题在于 a:它一直在寻找,而 b:当有重复时它返回 last 索引(人们通常期望第一个索引) -
geekswithblogs.net 比较了 4 个解决方案及其性能。
ToList()/FindIndex()技巧表现最好 -
@nixda 该链接无效。但是 ToList() 听起来并不是最有效的解决方案。 Marc Graveli 在找到匹配项时停止。
-
@KevinVictor 你仍然可以通过web.archive.org查看它
-
哦,有趣...如果确实如此,那将改变最佳答案。 (希望有人可以验证)
标签: c# .net linq ienumerable indexof