0

編集: Damien_The_Unbeliever が述べたように、質問を理解しやすくするために、最終結果は「シーケンスからサブシーケンスを検索」しようとしています。内Blue,Yellow,Greenからのシーケンスを見つけるcolorsToFindcolorList

内側のループが文字列のシーケンスが親ループに含まれているかどうかを判断する必要がある for ループをネストする最良の方法を判断するための指針を誰かが持っていますか?

以下の例では、「青」、「黄」、「緑」がインデックス [5]、[6]、[7] にあるため、これらのインデックスを返したいと思います。または、少なくとも [5] の最初に見つかったインデックス。

for (int j問題は、見つかったインデックスでループがどのように発生するかに関係していると思います。

string[] colorList = "Royal Blue", "Tomato Red", "Mustard Yellow", "Midnight Blue", "Blue", "Blue", "Yellow", "Green", "Red", "Evergreen", "Purple", "Black", "Jet Black";

string name = "Blue,Yellow,Green";

string[] colorsToFind = name.Split(',');
int found = 0;

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

if(found != 0)
{
    return found;
}

return null;
4

3 に答える 3

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;
    }
}
于 2012-11-30T18:53:47.733 に答える
0

発生を比較する場合は、同等性をテストしています。

if (colorList[i].indexOf(colorsToFind[j]) != -1)
{
    found = i;
    break;
}
于 2012-11-30T18:42:17.197 に答える
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;
    }
}
于 2012-11-30T18:49:13.677 に答える