如何从List中获取具有特定文本的索引

本文关键字:文本 索引 List 获取 | 更新日期: 2023-09-27 18:20:26

我有一个列表

 List<String> myArray = new List<string>()
        {
            "sometext",    /*1*/
            "desireText",  /*2*/
            "sometext",    /*3*/
            "sometext",    /*4*/
            "desireText",  /*5*/
            "desireText",  /*6*/
            "sometext",    /*7*/
            "sometext",    /*8*/
            "desireText",  /*9*/
            "sometext",    /*10*/
            "desireText",  /*11*/
            "desireText",  /*12*/
            "desireText",  /*13*/
            "sometext",    /*14*/
            "sometext",    /*15*/
            "sometext"     /*16*/
        };

我写错了代码:

List<Int32> indexes = new List<Int32>();
    for (int i = 0; i < myArray.Count; i++)
        {
            if (IsValidText(myArray[i]))
            {
                indexes.Add(i-1);
            }
        }

如何获得条件为"desireText"的索引:如果后续元素相等,则只获取第一个索引条目。即,结果应该是:

indexes = {1,4,8,10}

如何从List中获取具有特定文本的索引

您可以将条件添加到循环中:

List<Int32> indexes = new List<Int32>();
bool wasValid = false;  // flag if previous item was valid
for (int i = 0; i < myArray.Count; i++)
    {
        if (IsValidText(myArray[i]))
        {
            if (!wasValid) // previous item was not valid
                indexes.Add(i);  // note fix to keep as 0-based index 
            wasValid = true;
        }   
        else
        {
            wasValid = false;  // for next loop
        }
    }

您也可能会想出一个Linq方法,但它可能更难读取和调试,也不会更快。