子循环匹配条件时确定父循环索引的方法

时间:2012-11-30 18:34:09

标签: c# .net for-loop nested-loops

编辑:正如Damien_The_Unbeliever所述,为了使问题更容易理解,最终结果是试图搜索序列中的子序列"。在Blue,Yellow,Green

中查找来自colorsToFind的{​​{1}}序列

有没有人有一些指针来确定嵌套for循环的最佳方法,其中内循环需要确定的是一系列字符串包含在父循环中?

因此,对于下面的例子,因为" Blue"," Yellow"," Green"将在索引[5],[6],[7]中找到我想要返回那些索引。或者至少是[5]的第一个找到的索引。

我认为问题与colorList循环如何突破已发现的索引有关。

for (int j

3 个答案:

答案 0 :(得分:0)

当您要比较事件时,您正在测试相等性。

if (colorList[i].indexOf(colorsToFind[j]) != -1)
{
    found = i;
    break;
}

答案 1 :(得分:0)

string[] colorList = {"Royal Blue", "Tomato Red", "Mustard Yellow", "Midnight Blue", "Blue", "Blue", "Yellow", "Green", "Red", "Evergreen", "Purple", "Black", "Jet Black"};
string[] colorsToFind = "Blue,Yellow,Green".Split(',');

for (int i = 0; i < colorList.Length - colorsToFind.Length; i++)
{
    int j;  // we'll need this later
    for (j = 0; j < colorsToFind.Length; j++)
    {
        if (colorList[j + i] != colorsToFind[j])
        {
            break;  // stop if it doesn't match
        }
    }

    // j for-loop was exited because j == colorsToFind.Length so a set matched
    if (j == colorsToFind.Length)
    {
        Console.WriteLine(i);
        break;
    }
}

答案 2 :(得分:0)

for (int i = 0; i < colorList.Count -3; i++)
{
     if (colorList[i] == colorsToFind[0] && 
         colorList[i+1] == colorsToFind[1] && 
         colorList[i+2] == colorsToFind[2])
     {
            found = i;
            break;
     }
}

for (int i = 0; i < colorList.Count - colorsToFind.count; i++)
{
    for (int j = 0; j < colorsToFind.Count; j++)
    {
        bool match = true;
        if (colorList[i+j] != colorsToFind[j])
        {
            match = false;
        }  
    }
    if (match) 
    {   
        found = i;
        break;
    }
}