| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Общие вопросы по .NET и C# > Двухмерный динамичиекий масив? |
| Автор: WaReZMEN 14.2.2007, 04:58 |
| Раньше я писал на Delphi И там были динамические масивы и любой размерности (Mas: Array of Array of Integer) А как токае сделать в C#? |
| Автор: Idsa 14.2.2007, 08:14 | ||
Можно, например, сделать вот так:
К переменной a можно обращаться через индексаторы: a[i][j]. |
| Автор: ivashkanet 14.2.2007, 10:25 | ||
А если просто массив, то их два типа:
P.S. Можно конечно и большемерные |
| Автор: Naum 14.2.2007, 11:31 | ||
А в C# есть динамические массивы? Например, в VB.Net
|
| Автор: mr.DUDA 14.2.2007, 12:09 | ||||
А динамических массивов вообще не бывает в природе
Раскладывается в рефлекторе на:
|
| Автор: Naum 14.2.2007, 12:26 | ||
Это понятно. Я имел ввиду средства языка для более простого добавления элемента в массив. З.Ы. Че-то я не нашел такого, есть два internal класса Utils, но ни у одного из них нет метода CopyArray. З.З.Ы Рефлектор не лучший способ узнать средства языка. Он отображает только логику. С синтаксисом есть небольшие недочеты. Встречали ли вы в коде сгенерированном рефлектором циклы while, for. И еще, это конечно мелочи, но, например, строки
образуют разный IL-код, а в рефлекторе обе выглядят как System.IntPtrZero. (Все вышесказанное относится только к Lutz Roeder's .NET Reflector) |
| Автор: -Mikle- 14.2.2007, 13:54 |
| Array.Copy(....); |
| Автор: Naum 14.2.2007, 13:57 |
| -Mikle-, BR. |
| Автор: marcusmae 14.2.2007, 14:31 | ||||||
WaReZMEN, мнений об ответах Вы не помещали, а ведь несовсем понятно, правильно ли поняли Ваш вопрос. Помнится, 8 лет назад, когда занимались Pascal'ем и Fortran'ом, заходила речь о динамических переменных, и под этим понималась обычно динамическая инициализация с помощью new, dispose, alloc и т.п.
- динамический массив (с) Бартеньев эквивалентом будет
В этом смысле, C#-ная инициализация почти всюду динамическая, за исключением интегральных типов. А если хотите pointer^ на Array of Array of Integer, то на C# указатели доступны только в режиме unsafe. |
| Автор: -Mikle- 14.2.2007, 15:04 |
| [OFFTOP] сори, как это понять? [/OFFTOP] |
| Автор: Naum 14.2.2007, 15:06 |
| |
| Автор: Idsa 14.2.2007, 18:41 |
| А все-таки мне кажется, что автору нужно что-то вроде предложенного мной... Это, конечно, не массив, а коллекция, но функционал очень схож с дельфийскими динамическими массивами. Поясни, пожалуйста. |
| Автор: Exception 14.2.2007, 19:35 |
| А что тут пояснять |
| Автор: -Mikle- 14.2.2007, 20:36 | ||
В языках высокого уровня, такие вещи типа выделения памяти скрываются от программиста. Но все равно, на низком уровне это так все и выглядит. Ну не может "набор однотипных данных" выделить просто дополнительную память! Как? А вдруг за ним еще какие-то данные расположены? Поэтому при изменении размера массива, нужно выделить новое место в памяти, и туда скопировать данные из старого. А понятие динамический массив существует только в рамках языков высокого уровня и за собой скрывает реализацию выделенния новой памяти. В С# есть классы, которые тоже скрывают истинную сущность динамического выделения памяти. Тот же ArrayList внутри себя хранит массив, размером свойства Capacity. А когда массив заполнится, происходит выделение новой памяти с копированием туда данных из старого места. Таким образом прогрммист просто добавляет данные в коллекцию, и не задумывается о выделении новой памяти. |
| Автор: Idsa 14.2.2007, 20:46 | ||
Ну это-то понятно. Просто категоричное высказывание Дуды "динамических массивов не бывает" меня смутило Mikle, пасиб |
| Автор: -Mikle- 14.2.2007, 21:08 | ||
mr.DUDA мыслит исключительно низкоуровневым программированием |
| Автор: marcusmae 14.2.2007, 21:15 | ||
и правильно делает другое дело, что динамический - такое слово, что всегда рискуеш увязнуть в болоте тонкостей терминологии... |
| Автор: Idsa 14.2.2007, 21:27 |
| А вообще странно, что в fw нет коллекций, которые, при необходимости расширить коллекцию не копируют все данные, а ищут подходящий участок в памяти для новых данных и записывают их туда, не забывая при этом хранить ссылки на все участки памяти. Такой подход более предпочтителен с точки зрения производительности... но жизнь сборщика мусора усложняется на порядок |
| Автор: Exception 14.2.2007, 21:52 | ||||
А почему бы не называть его списком? Добавлено @ 21:52
А List это что? |
| Автор: mr.DUDA 14.2.2007, 22:47 |
| Господа, давайте определимся тогда о чём мы говорим - о динамически выделяемом массиве или массиве с динамически изменяемым размером ? А то у нас получается испорченный телефон: кто про фому, а кто - про ерёму... |
| Автор: Idsa 14.2.2007, 23:13 | ||
Второе Как заметил -Mikle-, при необходимости расширения размера коллекции происходит выделение новой памяти и копирование данных. А я же описал другой способ. |
| Автор: WaReZMEN 15.2.2007, 02:21 |
| Я задовал вопрос о динамических массивах тоесть тех каторые могут менять свои размер в процессе работы программы а также эти масивы должны быть двумерными тоесть иметь какбы калонку и строку (типа матрицы)... |
| Автор: Idsa 15.2.2007, 10:16 | ||
Об этом мы уже догадались |
| Автор: ivashkanet 15.2.2007, 10:28 | ||||||
Ну тогда LinkedList. Правда его нужно напильником для полного соответствия задаче. И это, ИМХО, единственное решение этой проблемы. Почему? Да потому, что кто-то ведь должен знать где находится конкретный элемент. Если о положении элементов знает сам массив, то это... обычный массив объектов (каждый элемент массива -- ссылка на элемент в куче). |
| Автор: mr.DUDA 15.2.2007, 10:36 |
| ivashkanet, речь о массиве и массиво-подобных контейнерах. Ты же говоришь о связном списке, который при всех своих достоинствах не позволяет брать элемент по индексу (и напильник в виде внешнего индексирующего массива или хэштейбла ему как пятая нога). Модератор: дабы пресечь нарастающие отклонения от эвклидовой прямой темы топика, призываю не флеймить, уважаемые. |
| Автор: Naum 15.2.2007, 11:26 | ||
Еще пример - String. |
| Автор: ivashkanet 15.2.2007, 11:32 | ||
| mr.DUDA, это просто был ответ на пост Idsa (он в самом сердце цитаты). Никто не говорит, что в этом листе будут храниться именно элементы. Там можно хранить массивы. ("ищут подходящий участок в памяти для новых данных и записывают их туда") Напильник -- это просто скрытие самой сути связного списка, который наружу выставит интерфейс обычного массива. То что я не буду пользоваться таким зверем это точно (меня более чем устраивает List<T>). Но теоретически он возможен.
ИМХО, это соответствует теме. |
| Автор: mr.DUDA 15.2.2007, 12:30 |
| Тема закрыта. |