我知道c#有Array.FindAll
和Array.IndexOf
。
是否有返回int[]
的Array.FindAllIndexOf
发布于 2012-05-04 14:09:52
string[] myarr = new string[] {"s", "f", "s"};
int[] v = myarr.Select((b,i) => b == "s" ? i : -1).Where(i => i != -1).ToArray();
这将返回0,2
如果数组中不存在该值,则它将返回一个int。
创建它的扩展方法
public static class EM
{
public static int[] FindAllIndexof<T>(this IEnumerable<T> values, T val)
{
return values.Select((b,i) => object.Equals(b, val) ? i : -1).Where(i => i != -1).ToArray();
}
}
并将其命名为
string[] myarr = new string[] {"s", "f", "s"};
int[] v = myarr.FindAllIndexof("s");
发布于 2013-03-08 21:52:52
搜索与指定谓词定义的条件匹配的元素,并返回整个System.Array内该匹配项的所有从零开始的索引。
public static int[] FindAllIndex<T>(this T[] array, Predicate<T> match)
{
return array.Select((value, index) => match(value) ? index : -1)
.Where(index => index != -1).ToArray();
}
发布于 2012-05-04 14:24:09
不,没有。但您可以编写自己的extension method。
public static int[] FindAllIndexOf<T>(this T[] a, Predicate<T> match)
{
T[] subArray = Array.FindAll<T>(a, match);
return (from T item in subArray select Array.IndexOf(a, item)).ToArray();
}
然后,对于您的数组,调用它。
https://stackoverflow.com/questions/10443461
复制相似问题