C# 如何从列表中获取具有特定文本的索引?

C# 如何从列表中获取具有特定文本的索引?,c#,arraylist,C#,Arraylist,我有一张单子 List myArray=new List() { “sometext”、/*1*/ “desireText”/*2*/ “sometext”、/*3*/ “sometext”、/*4*/ “desireText”/*5*/ “desireText”/*6*/ “sometext”、/*7*/ “sometext”、/*8*/ “desireText”/*9*/ “sometext”、/*10*/ “desireText”,/*11*/ “desireText”/*12*/ “de

我有一张单子

List myArray=new List()
{
“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*/
};
我写错了代码:

列表索引=新列表();
for(int i=0;i
如何在以下条件下获取“desireText”的索引: 如果后续元素相等,则只取第一个索引项。 也就是说,结果应该是:

index={1,4,8,10}

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

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
        }
    }
列表索引=新列表();
bool wasValid=false;//标记上一项是否有效
for(int i=0;i

您也可以提出Linq方法,但它可能更难读取和调试,而且不会更快。

该代码有什么问题?最大连续“desiredText”=5。在任何情况下,在一个“desiredText”和另一个“desiredText”之间都会有一个或多个“sometext”。@streamdown:result
index={1,4,8,10}
您期望它是什么?你能把
IsValidText(string)
的代码也贴出来吗?@SamIam它会在不应该的时候打印出5、7、11和12。你还想检查前一项不是“DesiredText”是的,我想这就是他想要的。在执行
索引后,您需要将
wasValid
翻转为true。添加()
。是的,这就是我要找的。只有少量添加索引。添加(i-1);您提供的输入将为您提供
{0,3,7,9}
,除非您的输入是基于1的索引,而不是
列表。我无法想象你想要一个负的基于一的索引。如果两个数组都是基于0的,那么给出的预期输出是正确的。如果输入基于1,输出基于0,则
i-1
是正确的。