我写了以下内容:
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();
}
}
但我不知道它是否已经存在了,不是吗?
发布于 2009-08-17 21:43:08
我会质疑这是否明智,但也许:
source.TakeWhile(x => x != value).Count();
(如果需要,使用EqualityComparer<T>.Default
模拟!=
)-但如果找不到,则需要观察返回...所以也许只需要走很长一段路
public static int IndexOf<T>(this IEnumerable<T> source, T value)
{
int index = 0;
var comparer = EqualityComparer<T>.Default; // or pass in as a parameter
foreach (T item in source)
{
if (comparer.Equals(item, value)) return index;
index++;
}
return -1;
}
发布于 2009-08-17 21:47:42
我会像这样实现它:
public static class EnumerableExtensions
{
public static int IndexOf<T>(this IEnumerable<T> obj, T value)
{
return obj.IndexOf(value, null);
}
public static int IndexOf<T>(this IEnumerable<T> obj, T value, IEqualityComparer<T> comparer)
{
comparer = comparer ?? EqualityComparer<T>.Default;
var found = obj
.Select((a, i) => new { a, i })
.FirstOrDefault(x => comparer.Equals(x.a, value));
return found == null ? -1 : found.i;
}
}
发布于 2014-11-06 19:29:11
我目前使用的方法比已经建议的方法要短一些,据我所知,它给出了预期的结果:
var index = haystack.ToList().IndexOf(needle);
它有点笨拙,但它能做这件事,而且相当简洁。
https://stackoverflow.com/questions/1290603
复制相似问题