2012-11-30 30 views
0

編輯:正如Damien_The_Unbeliever所述,爲了使問題更容易理解,最終結果是試圖「爲子序列搜索序列」。查找Blue,Yellow,GreencolorsToFindcolorList確定子環路匹配條件時父環路索引的方法

序列有沒有人有一些指針,以確定嵌套對於其中內環需要確定是串序列包含在父循環迴路的最佳方法?

因此,對於下面的例子,因爲在索引[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; 
+0

此外,如果被發現你沒有捕捉所有的陣列中的索引位置,我發現= TRUE。您可以將找到的值添加到內部循環中的列表或列表 .. – MethodMan

+0

因此,說明這一點的更清晰方式可能是您想要搜索序列中的子序列? (大概沒有任何中間不匹配的元素,但是在你的例子中這並不清楚 –

+0

@Damien_The_Unbeliever這就是我要找的,我將編輯這個問題,謝謝 – iamchrisfryer

回答

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; 
    } 
} 
+0

感謝您的幫助,我覺得這是關鍵'if(colorList [j + i]' – iamchrisfryer

0

當您的意思是比較事件發生時,您正在測試是否相等。

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

我認爲這與評論I留給Dave Zych爲indexOf會在'Royal Blue'中找到藍色,這將被視爲假陽性 – iamchrisfryer

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; 
    } 
} 
+2

現在想想會是什麼如果colorsToFind添加了'Red',就會發生:/ – juan

+0

@jmfsg那麼我認爲你會在此基礎上進行構建。 – Paparazzi