Подтвердить что ты не робот

Удалить первый элемент из массива

PHP-разработчик, работающий с С#. Я использую технику, чтобы удалить блок текста из большой строки, вставив строку в массив, а затем переместив первый элемент из массива и вернув то, что осталось обратно в строку.

С PHP (удивительный и легкий язык) это было просто

$array = explode('somestring',$string);
array_shift($array);
$newstring = implode(' ', $array);

и я закончил.

Я так сержусь на С#, что не позволяю создавать динамические массивы и не предлагать функции по умолчанию, которые могут делать то же самое, что и PHP в отношении массивов. Вместо динамических массивов мне приходится создавать списки и предопределять ключевые структуры и т.д. Но я новичок, и я уверен, что все еще есть одинаково грациозные способы сделать то же самое с С#.

Кто-нибудь покажет мне чистый способ достичь этой цели с помощью С#?

Перефразируйте вопрос: Как удалить первый элемент из массива с помощью кода С#.

Вот как далеко я получил, но RemoveAt выдает ошибку при отладке, поэтому я не считаю, что это работает:

//scoop-out feed header information
if (entry_start != "")
{
    string[] parts = Regex.Split(this_string, @entry_start);
    parts.RemoveAt(0);
    this_string = String.Join(" ", parts);
}
4b9b3361

Ответ 1

Я так сержусь на С#, что не позволяю создавать динамические массивы

Вы можете взглянуть на класс List<T>. Его RemoveAt может стоить проверить.

Но для вашего конкретного сценария вы можете просто использовать LINQ и Пропустить метод расширения (не забудьте добавить using System.Linq; в ваш файл чтобы привести его в сферу охвата):

if (entry_start != "")
{
    string[] parts = Regex.Split(this_string, @entry_start).Skip(1).ToArray();
    this_string = String.Join(" ", parts);
}

Ответ 2

С# не предназначен для быстрой и грязной работы, и он не специализируется на обработке текста. Кроме того, метод, который вы используете для удаления некоторой части строки с начала, является сумасшедшим imho.

Почему бы вам просто не использовать String.Substring(int start, int length) в сочетании с String.IndexOf("your delimiter")?

Ответ 3

Вот соответствующий код С#:

string input = "a,b,c,d,e";
string[] splitvals = input.Split(',');
string output = String.Join(",", splitvals, 1, splitvals.Length-1);
MessageBox.Show(output);

Ответ 4

Вы можете использовать LINQ для этого:

if (entry_start != "")
    this_string = String.Join(" ", Regex.Split(this_string, @entry_start).Skip(1).ToArray());

Ответ 5

string split = ",";
string str = "asd1,asd2,asd3,asd4,asd5";
string[] ary = str.Split(new string[] { split }, StringSplitOptions.RemoveEmptyEntries);
string newstr = string.Join(split, ary, 1, ary.Count() - 1);

разделяется на ",". удаляет первую запись. затем объединяется с ","

Ответ 6

Как указано выше, вы можете использовать LINQ. Skip(int) вернет IEnumerable<string>, который затем можно отбросить как массив.

string[] myArray = new string[]{"this", "is", "an", "array"};
myArray = myArray.Skip(1).toArray();

Ответ 7

Вам может быть удобнее использовать общие списки, чем массивы, которые больше похожи на массивы PHP.

Список <T>

Но если ваша цель - "удалить блок текста из большой строки", тем проще будет:

string Example = "somestring";
string BlockRemoved = Example.Substring(1);
// BlockRemoved = "omestring"

Edit

Я неправильно понял вопрос, думая, что вы просто удалили первый элемент из массива, в котором массив состоял из символов, составляющих строку.

Чтобы разбить строку на разделитель, посмотрите на метод String.Split. Ниже приведены некоторые полезные примеры.