powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Применить функцию к каждому элементу коллекции без создания копий массива
4 сообщений из 4, страница 1 из 1
Применить функцию к каждому элементу коллекции без создания копий массива
    #38054664
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Допустим, есть коллекция и надо её отнормировать по её максимальному элементу.

Делаю так

Код: c#
1.
2.
3.
4.
5.
double max = array.Max();
for (int i = 0; i < array.Count; i++)
{
    array[i] = array[i] / max;
}



Как это же сделать с помощью лямбда-выражинеий?

Если через Select, в которой лямбду написать, то будет создана новая копия коллекции - расходы памяти и всё такое, а мне надо отнормировать в уже существующей.

Если через ForEach, то он принимает тип Action, а не Func, а Экшен не возвращает результата применения действия к элементу коллекции.

Можно переопределить свой ForEach, но это надо что-то делать, а я ищу, есть ли простой встроенный во фреймворк способ? Неужели банальный for и всё?
...
Рейтинг: 0 / 0
Применить функцию к каждому элементу коллекции без создания копий массива
    #38054706
Edd.Dragon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Объясните доходчиво, что именно вас не устраивает в "банальный for"?

Типа, ребя, подскажите, как мне на Бентли от кухни до ванной доехать, если эта самая Бентля между кухней и ванной тупо не влазит?! Неужели банально... пешком?!
...
Рейтинг: 0 / 0
Применить функцию к каждому элементу коллекции без создания копий массива
    #38054951
LameUser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Достал хрустальный шар.

Сдается хрустальному шару что Array в данном случае нифига не массив а некая коллекция исполняющая IList.
Трем шар дальше, шар говорит нам что это все таки List<double>.


Чем не нравится линк через селект? Сдается мне, что проблема надуманная.

Хрустальный шар мне подсказывает. Изначальную коллекцию подменяем новой, память выделенная под старые значения освободится.

var doubleNumbers = new List<double> { 1.0, 1.1, 3, 4, 5 };
double max = doubleNumbers.Max();
doubleNumbers = doubleNumbers.Select(currentNumber => currentNumber/max).ToList();
...
Рейтинг: 0 / 0
Применить функцию к каждому элементу коллекции без создания копий массива
    #38056590
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо.

Мне было просто интересно, какими способами это можно сделать.

Как я понял, Select быстрее писать, for менее затратен по времени выполнения и памяти.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Применить функцию к каждому элементу коллекции без создания копий массива
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]