Массив управления строками - PullRequest
1 голос
/ 27 февраля 2020

У меня есть массив строк, я хочу взять всю строку в интервале этого массива, пока строка не содержит что-то.

Что-то вроде:

string [] arrayReading = {
  "e","x","a","takefromhere",
  "keeptaking","keeptaking","dont'ttakefromhere","m","p","l","e"
};

У меня есть пробовал:

        List<string> result = null;

        for (int i = 0; i < arrayReading.Length; i++)
        {
            if (arrayReading[i].Contains("takefromhere"))
            {
                result.Add(arrayReading[i]);

                if (!arrayReading[i + 1].Contains("dont'ttakefromhere"))
                {
                    result.Add(arrayReading[i + 1]);

                    if (!arrayReading[i + 2].Contains("dont'ttakefromhere"))
                    {
                        rescription.Add(arrayReading[i + 1]);
                    }
                }
            }
        }

Кажется, работает, но это не совсем динамично c, как я хочу, потому что, возможно, мне нужно взять 20 значений между "takefromhere" и "nottakefrom".

1 Ответ

2 голосов
/ 27 февраля 2020

Когда запрашивает , вы можете попробовать Linq :

 using System.Linq;

 ...

 List<string> result = arrayReading
   .SkipWhile(item => item != "takefromhere") 
   .TakeWhile(item => item != "dont'ttakefromhere")
   .ToList();

Или, если вы хотите старый добрый l oop решение:

 List<string> result = new List<string>(); 

 bool taking = false;

 foreach (string item in arrayReading) {
   if (!taking) 
     taking = item == "takefromhere";

   if (taking) {
     if (item == "dont'ttakefromhere")
       break;

     result.Add(item);
   } 
}

Давайте посмотрим:

Console.Write(string.Join("; ", result));

Итог:

takefromhere; keeptaking; keeptaking
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...