按索引列表搜索

本文关键字:搜索 列表 索引 | 更新日期: 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);