powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как обрезать массив?
25 сообщений из 54, страница 2 из 3
Как обрезать массив?
    #39283053
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman MejtesDima TПотому и жрет, т.к. каждый результат это новый массив.
что за бред, Linq работает с Enumerator'ом и ни какие массивы не возвращает. только перечисление.
Верно, не совсем правильно написал, но чтобы перечисление превратить в массив, как ТС хочет, то надо ToArray(), т.е. новый массив.
...
Рейтинг: 0 / 0
Как обрезать массив?
    #39283057
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v skopinwinsky!ага. смотря с чем сравнивать, если монтулить свой лист, то не жрет :Dтам же как-то можно память напрямую обрезать...
Можно не копировать, а использовать часть исходного массива.

Если обрезание тебе надо из-за того что "Out of memory" выходит, то переделывай свой массив на массив массивов, т.е. не один на > int.MaxValue элементов, а например 16, а вокруг обертку которая эти 16 выдаст за один.

Ты бы поподробнее написал в чем конкретно проблема.

PS winsky! правильно написал "пихать такое в один массив ..." это уже ненормально, сегодня массив у тебя на пределе, а завтра чуть больше станет инфы и начнет вылетать при создании массива. Возможно надо поискать другие алгоритмы, БД какую-нибудь задействовать например.
...
Рейтинг: 0 / 0
Как обрезать массив?
    #39283059
v skopin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А тупой вопрос можно? ToArray/ToList -создавая новые объекты умножает память или всё-таки использует как-то первоначальный объект?
...
Рейтинг: 0 / 0
Как обрезать массив?
    #39283065
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v skopinА тупой вопрос можно? ToArray/ToList -создавая новые объекты умножает память или всё-таки использует как-то первоначальный объект?
Он создает новый объект, т.к. старый никуда не девается. Т.е. копирование. Это в случае если массив int, с ссылочными типами - копируются ссылки, копии самих объектов не создаются.
...
Рейтинг: 0 / 0
Как обрезать массив?
    #39283066
v skopin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TPS winsky! правильно написал "пихать такое в один массив ..." это уже ненормально, сегодня массив у тебя на пределе, а завтра чуть больше станет инфы и начнет вылетать при создании массива. Возможно надо поискать другие алгоритмы, БД какую-нибудь задействовать например.Это задачка, к практике никакого отношения... Задача, можно на C# решатьЗадача – написать функцию (С++) для удаления из массива чисел типа “uint32_t” значений,

удовлетворяющих некоторому условию. Массив представлен указателем на элементы типа

“uint32_t”, причём значение первого – это количество значений в массиве.

То есть указатель uint32_t* указывает на массив значений N+1. Первое значение равно N, а

последующие N значений – это элементы массива. Например, массив чисел 1,2,2,3 в памяти

выглядит так: 4,1,2,2,3. Если требуется удалить элементы со значением «2», то результат будет

таким: 2,1,3.

Предложите, как минимум три возможных варианта решения, проанализируйте каждое из них,

выберите лучшее для различных условий применения:

 ограниченная память

 ограниченная производительность процессора

 многопоточность – необходимость чтения массива из нескольких параллельных потоков

во время удаления элементовЗадача – написать функцию (С++) для удаления из массива чисел типа “uint32_t” значений,

удовлетворяющих некоторому условию. Массив представлен указателем на элементы типа

“uint32_t”, причём значение первого – это количество значений в массиве.

То есть указатель uint32_t* указывает на массив значений N+1. Первое значение равно N, а

последующие N значений – это элементы массива. Например, массив чисел 1,2,2,3 в памяти

выглядит так: 4,1,2,2,3. Если требуется удалить элементы со значением «2», то результат будет

таким: 2,1,3.

Предложите, как минимум три возможных варианта решения, проанализируйте каждое из них,

выберите лучшее для различных условий применения:

 ограниченная память

 ограниченная производительность процессора

 многопоточность – необходимость чтения массива из нескольких параллельных потоков

во время удаления элементов
...
Рейтинг: 0 / 0
Как обрезать массив?
    #39283067
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T. Возможно надо поискать другие алгоритмы, БД какую-нибудь задействовать например.
Задача то неизвестна....
мож MemoryMappedFile спасёт - там всё int64
...
Рейтинг: 0 / 0
Как обрезать массив?
    #39283068
v skopin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TОн создает новый объект, т.к. старый никуда не девается. Т.е. копирование. Это в случае если массив int, с ссылочными типами - копируются ссылки, копии самих объектов не создаются.ответ очевиден, действительно тупой вопрос...
...
Рейтинг: 0 / 0
Как обрезать массив?
    #39283069
v skopin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
те решается пункт с маленькой памятью...
...
Рейтинг: 0 / 0
Как обрезать массив?
    #39283075
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v skopinте решается пункт с маленькой памятью...
первым проходом - подсчитать размер нового массива, создать новый нужного размера,
вторым - скопировать, исходный массив - освободить
...
Рейтинг: 0 / 0
Как обрезать массив?
    #39283078
v skopin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилпервым проходом - подсчитать размер нового массива, создать новый нужного размера,
вторым - скопировать, исходный массив - освободитья же первым же проходом:
Код: c#
1.
2.
3.
4.
            uint counter = 0;
            for (uint i = 1; i < UCount; i++)
                if (!condition(i))
                    List[++counter] = List[i];
...
Рейтинг: 0 / 0
Как обрезать массив?
    #39283080
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v skopinте решается пункт с маленькой памятью...
Задание перечитай
авторТо есть указатель uint32_t* указывает на массив значений N+1. Первое значение равно N, а

последующие N значений – это элементы массива. Например, массив чисел 1,2,2,3 в памяти

выглядит так: 4,1,2,2,3. Если требуется удалить элементы со значением «2», то результат будет

таким: 2,1,3.

тут все тупо и просто, переносишь все нужные значения в начало массива и в нулевой элемент пишешь их количество. Не тот ЯП ты выбрал, там же написано С++ и указатели, а в С++ нет размера массива, есть указатель на начало и отдельно размер.
А смысл "маленькой памяти" в том что ты вообще не используешь дополнительную память, а обходишься той что уже есть.

И ХЗ с чего ты решил что массив в C# может быть > int.MaxSize ? Вроде невозможно это, нагуглить не смог, подумал раз ты его создал, то может путаю.
...
Рейтинг: 0 / 0
Как обрезать массив?
    #39283082
v skopin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
кстати, уже на 0,5 ярде возникает исключение(((
...
Рейтинг: 0 / 0
Как обрезать массив?
    #39283090
v skopin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TА смысл "маленькой памяти" в том что ты вообще не используешь дополнительную память, а обходишься той что уже есть.А как это сделать в с#?
...
Рейтинг: 0 / 0
Как обрезать массив?
    #39283093
v skopin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima TИ ХЗ с чего ты решил что массив в C# может быть > int.MaxSize ? Вроде невозможно это, нагуглить не смог, подумал раз ты его создал, то может путаю.на ноуте не даёт, а на стационаре (32Г оперативки) дал...
...
Рейтинг: 0 / 0
Как обрезать массив?
    #39283094
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v skopinDima TА смысл "маленькой памяти" в том что ты вообще не используешь дополнительную память, а обходишься той что уже есть.А как это сделать в с#?
что сделать? по индексу 0 - поместить новое значение длины, память останется занятой.
нужно отдать память - только копирование (явное иди неявное) и похер c# или C
...
Рейтинг: 0 / 0
Как обрезать массив?
    #39283096
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v skopinна ноуте не даёт, а на стационаре (32Г оперативки) дал...
не уверен, что учебное задание понято правильно
...
Рейтинг: 0 / 0
Как обрезать массив?
    #39283097
v skopin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропилv skopinпропущено...
А как это сделать в с#?
что сделать? по индексу 0 - поместить новое значение длины, память останется занятой.
нужно отдать память - только копирование (явное иди неявное) и похер c# или C
те было бы решением:
Код: c#
1.
2.
3.
4.
5.
            uint counter = 0;
            for (uint i = 1; i < UCount; i++)
                if (!condition(i))
                    List[++counter] = List[i];
            List[0] = counter;


И ВСЁ?
...
Рейтинг: 0 / 0
Как обрезать массив?
    #39283098
v skopin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
неужели нельзя никак хвост выкинуть???
...
Рейтинг: 0 / 0
Как обрезать массив?
    #39283099
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
v skopinнеужели нельзя никак хвост выкинуть???
нельзя.
...
Рейтинг: 0 / 0
Как обрезать массив?
    #39283119
v skopin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ладно, спасибо всем! ясно всё...
...
Рейтинг: 0 / 0
Как обрезать массив?
    #39283133
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Изопропил и похер c# или C
Не похер, точнее похер в рамках ТЗ где выбор С# или C++, а в С есть realloc() но это к теме не относиться.
...
Рейтинг: 0 / 0
Как обрезать массив?
    #39283137
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

Похер, ибо realloc может вызвать переразмещение и при уменьшении размера выденой памяти
...
Рейтинг: 0 / 0
Как обрезать массив?
    #39283140
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилDima T,

Похер, ибо realloc может вызвать переразмещение и при уменьшении размера выденой памяти
Может вызвать, а может не вызвать.
Не факт что realloc() на каком-нибудь девайсе с кастрированной памятью будет раскидываться ею как c#. Вобщем от рантайма все зависит.
...
Рейтинг: 0 / 0
Как обрезать массив?
    #39283146
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,

Не "раскидываться" памятью, а бороться с фрагментацией

Фрагментация с# тож касается
...
Рейтинг: 0 / 0
Как обрезать массив?
    #39283152
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилФрагментация с# тож касается
Сборщик мусора .net может дефрагментировать память, это дорого но реализуемо, в отличии от С/С++.
...
Рейтинг: 0 / 0
25 сообщений из 54, страница 2 из 3
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как обрезать массив?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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