Я пытаюсь написать алгоритм для удаления имени из списка имен по определенному индексу. Сначала я буду читать файл построчно. Файл будет таким:
amelie barbon cat dog thomas | 3
raty pertw ituy |5
Теперь, например, мы видим первую строку, где у нас наконец есть три (3), поэтому здесь мы должны прочитать число, наконец, для каждой строки, это число blackNumber
, так называемое, потому что после чтения этого числа мы должны удалить каждую строку по этому индексу одну за другой, пока у нас не останется 1 строка в массиве строк. И эта единственная оставшаяся строка является нашим ответом.
Например: Cat
будет удалено в первой итерации, и список станет
amelie barbon dog thomas
Теперь будет удален dog
, а затем thomas
, после этих двух одинаковых удалений список будет таким:
amelie barbon
До сих пор мой код работал нормально, но теперь мы должны удалить по индексу 3, но в списке есть только 2 элемента, поэтому следующий счетчик удаления должен начинаться так:
amelie(index:1)-> barbon(index:2)->amelie(index:3)
А строку amelie
надо удалить, что останется barbon
в списке, вот и ответ. (Этот последний шаг, когда общее количество элементов списка меньше, чем blackNumber, тогда я не могу понять логику, как это сделать).
То, что я пробовал, приведено ниже: (что будет работать бесконечно, когда количество списков меньше blackNumber
)
class Program
{
static void Main(string[] args)
{
using (StreamReader reader = File.OpenText("C:\\Users\\Mohit\\Desktop\\PolmStudio Tasks\\anmeDelete\\anmeDelete\\file.txt"))
while (!reader.EndOfStream)
{
List<string> list = null;
string line = reader.ReadLine(); ;
if (null != line)
{
list = new List<string>();
string[] digits = line.Split(new char[] { ' ', '\n', '|' }, StringSplitOptions.RemoveEmptyEntries);
for (int i = 0; i < digits.Count() - 1; i++)
{
list.Add(digits[i]);
}
int blacknumber = Convert.ToInt32(digits[digits.Count() - 1]) - 1;
do
{
for (int i = 0; i < list.Count(); i++)
{
if (i == blacknumber)
{
list.RemoveAt(i);
}
}
} while (list.Count > 1);
}
foreach (string str in list)
{
Console.WriteLine(str);
}
Console.WriteLine("");
}
Console.ReadKey();
}
}