2014-09-02 71 views
0

我有一個List如何使用List中的特定文本獲取索引?

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

該代碼有什麼問題? – 2014-09-02 15:32:17

+0

最大連續「desiredText」= 5。在任何情況下,在一個「desiredText」和其他「desiredText」之間,將會有一個或多個「sometext」。 – streamdown 2014-09-02 15:32:49

+2

@streamdown:結果'索引= {1,4,8,10}'你如何期待它?你可以發佈'IsValidText(string)'的代碼嗎? – 2014-09-02 15:32:55

回答

2

你可以只添加條件,你的循環:

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的方法,但它可能會更難讀取和調試,並不會更快。

+0

是的,我認爲這就是他之後。在你執行了'indexes.Add()'之後,你需要將'wasValid'變爲true。 – Jonesopolis 2014-09-02 15:38:02

+0

@Jonesy好抓 - 固定。 – 2014-09-02 15:39:00

+0

是的,那就是我一直在尋找的東西。只有一小部分 indexes.Add(i-1); – streamdown 2014-09-02 15:44:59

相關問題