Как добавить значение к каждому элементу в линейном стиле массива

1

Допустим, у меня есть массив

string[] arr = new string[] {"1","2","3"};

Я хотел бы добавить строку в конец значения, примерно так:

arr.appendToEnd(" Test");

return arr; // returns {"1 Test","2 Test","3 Test"}

Мне было интересно, есть ли что-то встроенное, которое может это сделать, вместо того, чтобы создавать собственный метод расширения.

  • 0
    просто переберите массив и добавьте к каждому элементу пробел и протестируйте. я не думаю, что есть встроенный метод.
  • 0
    stackoverflow.com/questions/3867961/… вы, вероятно, можете изменить это в соответствии с вашими потребностями
Теги:

2 ответа

4
Лучший ответ

Нет ничего встроенного. Вы можете использовать LINQ для легкого создания нового массива:

arr = arr.Select(x => x + " Test").ToArray();

... но это не изменит исходный массив. Если что-либо еще имеет ссылку на исходный массив, они не будут видеть изменения. Обычно это действительно хорошая ИМО, но иногда вы можете изменить существующую коллекцию.

Для этого вы можете написать свой собственный метод общего назначения, чтобы изменить существующий массив (или любую другую реализацию IList<T>):

public static void ModifyAll<T>(this IList<T> source, Func<T, T> modification)
{
    // TODO: Argument validation
    for (int i = 0; i < source.Count; i++)
    {
        source[i] = modification(source[i]);
    }
}

Тогда вы можете использовать:

arr.ModifyAll(x => x + " Test");

Я определенно использовал бы это, а не писал метод расширения, специфичный для строки-конкатенации.

  • 0
    Эй спасибо Что такое arr прежде чем использовать .ToArray() ? (Любопытно)
  • 1
    @RealWorld: я не уверен, что вы имеете в виду. arr.Select(x => x + " Test") возвращает лениво оцененный итератор, который выдаст результат проекции при запросе. Это не изменяет arr вообще.
0

Если "встроенный" означает функцию appendToEnd, то нет.

Однако его достаточно легко сделать:

arr = arr.Select(s => s + " Test").ToArray();
  • 0
    Это не изменит массив.
  • 0
    @JonSkeet Правильно, исправлено.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню