按索引列表搜索
本文关键字:搜索 列表 索引 | 更新日期: 2023-09-27 18:33:48
>我正在尝试搜索第一个列表项的索引,该列表项的值为"hello",并且索引高于 15。这显然不是这样,因为当我引用 p 时,我指的是值,而不是字符串本身(IndexOf 查找列表中第一次出现的"hello"的索引,因为 p == 字符串)
int soucasny = list1.FindIndex(p => p == "hello" || list1.IndexOf(p) > 15);
有没有办法达到预期的结果?可能选择?
您可以指定IndexOf
的起始索引
int soucasny = list1.IndexOf("hello", 15);
使用 List<T>.FindIndex Method (Int32, Predicate<T>)
它接受谓词并指定索引以开始搜索,如下所示:
int soucasny = list1.FindIndex(15, p => p == "hello");
如果你有List<string>
那么使用 List<T>.IndexOf
会给你结果,但如果你有一个自定义对象列表,那么你可能需要谓词。喜欢:
List<Student> studentList = new List<Student>();
int index = studentList.FindIndex(15, p=> p.StudentName == "Some Name");
>@Selman22为您的确切问题提供最正确和最有效的答案。 我仅提供以下内容作为附录,适用于您可能具有非List
序列或需要从过滤器表达式中访问元素索引的情况:
public static int FirstIndexWhere<T>(
this IEnumerable<T> sequence,
Func<T, int, bool> predicate)
{
if (sequence == null)
throw new ArgumentNullException("sequence");
if (predicate == null)
throw new ArgumentNullException("predicate");
var index = 0;
for (var enumerator = sequence.GetEnumerator(); enumerator.MoveNext(); ++index)
{
if (predicate(enumerator.Current, index))
return index;
}
return -1;
}
用法示例:
int soucasny = list1.FirstIndexWhere((p, i) => p == "hello" && i > 15);