|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
Привет всем! Собственно сабж...: имеем массив длиною Lm, нужно оставить его обрезать, те удалить всё, начиная с Cm? (оба числа > int.MaxValue, те Array.Resize не пойдёт) + по понятным причинам тоже не выход: Код: c# 1. 2. 3. 4.
Заранее спасибо ВС ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 16:05 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
Take Skip от List<int> не подойдет ? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 16:19 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
используй List<int> у него внутри массив. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 16:21 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
Dima Tиспользуй List<int> у него внутри массив. внутре у него неонка(c). ТС - Take/Skip тебе в помощь (это linq) ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 16:23 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
какой List? повторяю: > int.MaxValue, тут только массив((( иначе вылет из памяти((( ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 16:25 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
Прежде чем LINQ советовать повнимательнее почитайте v skopinоба числа > int.MaxValue int.MaxValue это 2 лярда если что. Если uint то занимают 8+ Гб, а вы копию делать предлагаете. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 16:28 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
Dima TПрежде чем LINQ советовать повнимательнее почитайте v skopinоба числа > int.MaxValue int.MaxValue это 2 лярда если что. Если uint то занимают 8+ Гб, а вы копию делать предлагаете. ну пихать такое в один массив это из той же серии, что предлагать работать с ним чз linq, не? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 16:33 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
v skopinкакой List? повторяю: > int.MaxValue, тут только массив((( иначе вылет из памяти((( Точно, там int в индексе. Можешь сделать на его основе свою обертку с uint List.cs ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 16:35 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
Сам массив ты никак не ужмешь, т.к. все варианты "ужимания" через копирование. https://msdn.microsoft.com/ru-ru/library/bb348051(v=vs.100).aspx Array.Resize<T> - метод ... Заметки Этот метод выделяет новый массив заданного размера, копирует элементы из старого массива в новый, а затем заменяет старый массив новым. поэтому делать свою обертку, которая просто сэмулирует ужимание, а массив останется как был. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 16:41 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
Dima TМожешь сделать на его основе свою обертку с > int.MaxValue List.cs а что там можно тупо с int на uint переделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 16:44 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
Dima Tv skopinкакой List? повторяю: > int.MaxValue, тут только массив((( иначе вылет из памяти((( Точно, там int в индексе. Можешь сделать на его основе свою обертку с uint List.cs ага. а лист, по-вашему конечно же не создает нового инстанса массива при изменении размерности? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 16:45 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
a как работает Take? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 16:46 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
v skopina как работает Take? как-то так ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 16:48 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
winsky!, там ничего о механизме выполнения..., те, полагаю, тоже создаёт буферный ... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 16:52 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
winsky!Dima Tпропущено... Точно, там int в индексе. Можешь сделать на его основе свою обертку с uint List.cs ага. а лист, по-вашему конечно же не создает нового инстанса массива при изменении размерности? Для уменьшения размера вполне возможно оставить исходный массив тем же и используя его съэмулировать меньший. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 16:53 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
да и вообще: linq жрёт ресурс... может как-то с++ приладить? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 16:54 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
Dima TДля уменьшения размера вполне возможно оставить исходный массив тем же и используя его съэмулировать меньший.А вот это мысль! переписать равенство... может как-то отдельным потоком обрезать? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 16:59 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
v skopinда и вообще: linq жрёт ресурс... Потому и жрет, т.к. каждый результат это новый массив. v skopinможет как-то с++ приладить? А что конкретно надо с обрезанным массивом делать дальше? Может тупо завести переменную Код: c# 1.
и использовать ее вместо Код: c# 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 17:02 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
v skopinда и вообще: linq жрёт ресурс... может как-то с++ приладить? ага. смотря с чем сравнивать, если монтулить свой лист, то не жрет :D ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 17:06 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
есть же LongLength... размер, кстати <uint.MaxValue ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 17:10 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
winsky!ага. смотря с чем сравнивать, если монтулить свой лист, то не жрет :Dтам же как-то можно память напрямую обрезать... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 17:13 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
Как-то так сделать: <какая-то хрень SetMemory(A, counter * sizeof(uint))> PS Код: c# 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 17:20 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
PPS после вот этого использую: Код: c# 1. 2. 3. 4. 5. 6.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 17:22 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
Dima TПотому и жрет, т.к. каждый результат это новый массив. что за бред, Linq работает с Enumerator'ом и ни какие массивы не возвращает. только перечисление. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 17:34 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
Roman MejtesDima TПотому и жрет, т.к. каждый результат это новый массив. что за бред, Linq работает с Enumerator'ом и ни какие массивы не возвращает. только перечисление. вот-вот. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 17:39 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
Roman MejtesDima TПотому и жрет, т.к. каждый результат это новый массив. что за бред, Linq работает с Enumerator'ом и ни какие массивы не возвращает. только перечисление. Верно, не совсем правильно написал, но чтобы перечисление превратить в массив, как ТС хочет, то надо ToArray(), т.е. новый массив. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 17:48 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
v skopinwinsky!ага. смотря с чем сравнивать, если монтулить свой лист, то не жрет :Dтам же как-то можно память напрямую обрезать... Можно не копировать, а использовать часть исходного массива. Если обрезание тебе надо из-за того что "Out of memory" выходит, то переделывай свой массив на массив массивов, т.е. не один на > int.MaxValue элементов, а например 16, а вокруг обертку которая эти 16 выдаст за один. Ты бы поподробнее написал в чем конкретно проблема. PS winsky! правильно написал "пихать такое в один массив ..." это уже ненормально, сегодня массив у тебя на пределе, а завтра чуть больше станет инфы и начнет вылетать при создании массива. Возможно надо поискать другие алгоритмы, БД какую-нибудь задействовать например. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 17:54 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
А тупой вопрос можно? ToArray/ToList -создавая новые объекты умножает память или всё-таки использует как-то первоначальный объект? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 17:54 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
v skopinА тупой вопрос можно? ToArray/ToList -создавая новые объекты умножает память или всё-таки использует как-то первоначальный объект? Он создает новый объект, т.к. старый никуда не девается. Т.е. копирование. Это в случае если массив int, с ссылочными типами - копируются ссылки, копии самих объектов не создаются. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 17:59 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
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. Предложите, как минимум три возможных варианта решения, проанализируйте каждое из них, выберите лучшее для различных условий применения: ограниченная память ограниченная производительность процессора многопоточность – необходимость чтения массива из нескольких параллельных потоков во время удаления элементов ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 18:00 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
Dima T. Возможно надо поискать другие алгоритмы, БД какую-нибудь задействовать например. Задача то неизвестна.... мож MemoryMappedFile спасёт - там всё int64 ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 18:01 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
Dima TОн создает новый объект, т.к. старый никуда не девается. Т.е. копирование. Это в случае если массив int, с ссылочными типами - копируются ссылки, копии самих объектов не создаются.ответ очевиден, действительно тупой вопрос... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 18:06 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
те решается пункт с маленькой памятью... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 18:08 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
v skopinте решается пункт с маленькой памятью... первым проходом - подсчитать размер нового массива, создать новый нужного размера, вторым - скопировать, исходный массив - освободить ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 18:17 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
Изопропилпервым проходом - подсчитать размер нового массива, создать новый нужного размера, вторым - скопировать, исходный массив - освободитья же первым же проходом: Код: c# 1. 2. 3. 4.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 18:21 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
v skopinте решается пункт с маленькой памятью... Задание перечитай авторТо есть указатель uint32_t* указывает на массив значений N+1. Первое значение равно N, а последующие N значений – это элементы массива. Например, массив чисел 1,2,2,3 в памяти выглядит так: 4,1,2,2,3. Если требуется удалить элементы со значением «2», то результат будет таким: 2,1,3. тут все тупо и просто, переносишь все нужные значения в начало массива и в нулевой элемент пишешь их количество. Не тот ЯП ты выбрал, там же написано С++ и указатели, а в С++ нет размера массива, есть указатель на начало и отдельно размер. А смысл "маленькой памяти" в том что ты вообще не используешь дополнительную память, а обходишься той что уже есть. И ХЗ с чего ты решил что массив в C# может быть > int.MaxSize ? Вроде невозможно это, нагуглить не смог, подумал раз ты его создал, то может путаю. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 18:22 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
кстати, уже на 0,5 ярде возникает исключение((( ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 18:28 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
Dima TА смысл "маленькой памяти" в том что ты вообще не используешь дополнительную память, а обходишься той что уже есть.А как это сделать в с#? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 18:31 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
Dima TИ ХЗ с чего ты решил что массив в C# может быть > int.MaxSize ? Вроде невозможно это, нагуглить не смог, подумал раз ты его создал, то может путаю.на ноуте не даёт, а на стационаре (32Г оперативки) дал... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 18:34 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
v skopinDima TА смысл "маленькой памяти" в том что ты вообще не используешь дополнительную память, а обходишься той что уже есть.А как это сделать в с#? что сделать? по индексу 0 - поместить новое значение длины, память останется занятой. нужно отдать память - только копирование (явное иди неявное) и похер c# или C ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 18:36 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
v skopinна ноуте не даёт, а на стационаре (32Г оперативки) дал... не уверен, что учебное задание понято правильно ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 18:36 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
Изопропилv skopinпропущено... А как это сделать в с#? что сделать? по индексу 0 - поместить новое значение длины, память останется занятой. нужно отдать память - только копирование (явное иди неявное) и похер c# или C те было бы решением: Код: c# 1. 2. 3. 4. 5.
И ВСЁ? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 18:44 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
неужели нельзя никак хвост выкинуть??? ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 18:45 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
v skopinнеужели нельзя никак хвост выкинуть??? нельзя. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 18:49 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
ладно, спасибо всем! ясно всё... ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 19:27 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
Изопропил и похер c# или C Не похер, точнее похер в рамках ТЗ где выбор С# или C++, а в С есть realloc() но это к теме не относиться. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 20:03 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
Dima T, Похер, ибо realloc может вызвать переразмещение и при уменьшении размера выденой памяти ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 20:14 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
ИзопропилDima T, Похер, ибо realloc может вызвать переразмещение и при уменьшении размера выденой памяти Может вызвать, а может не вызвать. Не факт что realloc() на каком-нибудь девайсе с кастрированной памятью будет раскидываться ею как c#. Вобщем от рантайма все зависит. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 20:23 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
Dima T, Не "раскидываться" памятью, а бороться с фрагментацией Фрагментация с# тож касается ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 20:32 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
ИзопропилФрагментация с# тож касается Сборщик мусора .net может дефрагментировать память, это дорого но реализуемо, в отличии от С/С++. ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 20:56 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
можнопопробовать Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61.
а вообще, так красивее Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28.
... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 21:20 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
Dima TИзопропилФрагментация с# тож касается Сборщик мусора .net может дефрагментировать память, это дорого но реализуемо, в отличии от С/С++. Может, но в текущей реализации большие фрагменты - не трогает ... |
|||
:
Нравится:
Не нравится:
|
|||
29.07.2016, 21:49 |
|
Как обрезать массив?
|
|||
---|---|---|---|
#18+
Где-то в степиможнопопробовать а вообще, так красивее Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28.
вообще-то Take & Skip где-то так и реализованы... ... |
|||
:
Нравится:
Не нравится:
|
|||
01.08.2016, 13:24 |
|
|
start [/forum/topic.php?all=1&fid=20&tid=1400429]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
70ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 171ms |
0 / 0 |