按索引列出搜索?

时间:2014-12-09 21:42:07

标签: c# list search indexing

我正在尝试搜索第一个列表项索引,其值“hello”且它是 index 高于 15 。 这显然不是这样,因为当我提到 p 时,我指的是,而不是字符串本身(IndexOf查找列表中第一次出现“hello”的索引,因为 p == string

int soucasny = list1.FindIndex(p => p == "hello" || list1.IndexOf(p) > 15);

有没有办法达到预期的效果?选择可能吗?

3 个答案:

答案 0 :(得分:9)

您可以为IndexOf

指定起始索引
int soucasny = list1.IndexOf("hello", 15);

答案 1 :(得分:2)

使用带有谓词的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");

答案 2 :(得分:1)

@ 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);