![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| WaReZMEN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
Раньше я писал на Delphi И там были динамические масивы и любой размерности
(Mas: Array of Array of Integer) А как токае сделать в C#? |
|||
|
||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 14 Всего: 62 |
Можно, например, сделать вот так:
К переменной a можно обращаться через индексаторы: a[i][j]. |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
А если просто массив, то их два типа:
P.S. Можно конечно и большемерные |
|||
|
||||
| Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 8 Всего: 15 |
А в C# есть динамические массивы? Например, в VB.Net
-------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
| mr.DUDA |
|
||||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
А динамических массивов вообще не бывает в природе
Раскладывается в рефлекторе на:
-------------------- ![]() |
||||
|
|||||
| Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 8 Всего: 15 |
Это понятно. Я имел ввиду средства языка для более простого добавления элемента в массив. З.Ы. Че-то я не нашел такого, есть два internal класса Utils, но ни у одного из них нет метода CopyArray. З.З.Ы Рефлектор не лучший способ узнать средства языка. Он отображает только логику. С синтаксисом есть небольшие недочеты. Встречали ли вы в коде сгенерированном рефлектором циклы while, for. И еще, это конечно мелочи, но, например, строки
образуют разный IL-код, а в рефлекторе обе выглядят как System.IntPtrZero. (Все вышесказанное относится только к Lutz Roeder's .NET Reflector) -------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
| -Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 17 Всего: 59 |
Array.Copy(....);
-------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
| Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 8 Всего: 15 |
-Mikle-, BR.
-------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
| marcusmae |
|
||||||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
WaReZMEN, мнений об ответах Вы не помещали, а ведь несовсем понятно, правильно ли поняли Ваш вопрос. Помнится, 8 лет назад, когда занимались Pascal'ем и Fortran'ом, заходила речь о динамических переменных, и под этим понималась обычно динамическая инициализация с помощью new, dispose, alloc и т.п.
- динамический массив (с) Бартеньев эквивалентом будет
В этом смысле, C#-ная инициализация почти всюду динамическая, за исключением интегральных типов. А если хотите pointer^ на Array of Array of Integer, то на C# указатели доступны только в режиме unsafe. Это сообщение отредактировал(а) marcusmae - 14.2.2007, 15:50 -------------------- ἀπὸ μηχανῆς θεός |
||||||
|
|||||||
| -Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 17 Всего: 59 |
-------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
| Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 8 Всего: 15 |
-------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 14 Всего: 62 |
А все-таки мне кажется, что автору нужно что-то вроде предложенного мной... Это, конечно, не массив, а коллекция, но функционал очень схож с дельфийскими динамическими массивами.
Поясни, пожалуйста. |
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
А что тут пояснять
|
|||
|
||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 14 Всего: 62 |
Массив - это, в первую очередь, набор однотипных данных. А уж как он организован, вопрос открытый. Почему бы и не организовать массив, как коллекции, выделяя память динамически. Ну в конце концов, динамические массивы Delphi - это не массивы что ли? |
|||
|
||||
| -Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 17 Всего: 59 |
В языках высокого уровня, такие вещи типа выделения памяти скрываются от программиста. Но все равно, на низком уровне это так все и выглядит. Ну не может "набор однотипных данных" выделить просто дополнительную память! Как? А вдруг за ним еще какие-то данные расположены? Поэтому при изменении размера массива, нужно выделить новое место в памяти, и туда скопировать данные из старого. А понятие динамический массив существует только в рамках языков высокого уровня и за собой скрывает реализацию выделенния новой памяти. В С# есть классы, которые тоже скрывают истинную сущность динамического выделения памяти. Тот же ArrayList внутри себя хранит массив, размером свойства Capacity. А когда массив заполнится, происходит выделение новой памяти с копированием туда данных из старого места. Таким образом прогрммист просто добавляет данные в коллекцию, и не задумывается о выделении новой памяти. -------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 14 Всего: 62 |
Ну это-то понятно. Просто категоричное высказывание Дуды "динамических массивов не бывает" меня смутило Mikle, пасиб |
|||
|
||||
| -Mikle- |
|
|||
![]() Невидимка Vingrad'а ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 1672 Регистрация: 22.6.2003 Где: Казахстан, Астана Репутация: 17 Всего: 59 |
mr.DUDA мыслит исключительно низкоуровневым программированием -------------------- Если тебе плюют в спину, значит ты впереди... |
|||
|
||||
| marcusmae |
|
|||
![]() stravaganza ![]() ![]() Профиль Группа: Участник Сообщений: 874 Регистрация: 26.3.2006 Репутация: 22 Всего: 39 |
и правильно делает другое дело, что динамический - такое слово, что всегда рискуеш увязнуть в болоте тонкостей терминологии... Это сообщение отредактировал(а) marcusmae - 14.2.2007, 21:16 -------------------- ἀπὸ μηχανῆς θεός |
|||
|
||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 14 Всего: 62 |
А вообще странно, что в fw нет коллекций, которые, при необходимости расширить коллекцию не копируют все данные, а ищут подходящий участок в памяти для новых данных и записывают их туда, не забывая при этом хранить ссылки на все участки памяти. Такой подход более предпочтителен с точки зрения производительности... но жизнь сборщика мусора усложняется на порядок
|
|||
|
||||
| Exception |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 4525 Регистрация: 26.12.2004 Репутация: 29 Всего: 186 |
А почему бы не называть его списком? Добавлено @ 21:52 А List это что? |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Господа, давайте определимся тогда о чём мы говорим - о динамически выделяемом массиве или массиве с динамически изменяемым размером ? А то у нас получается испорченный телефон: кто про фому, а кто - про ерёму...
-------------------- ![]() |
|||
|
||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 14 Всего: 62 |
Второе Как заметил -Mikle-, при необходимости расширения размера коллекции происходит выделение новой памяти и копирование данных. А я же описал другой способ. |
|||
|
||||
| WaReZMEN |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 683 Регистрация: 9.6.2006 Где: Россия, Санкт-Пет ербург Репутация: нет Всего: 3 |
Я задовал вопрос о динамических массивах тоесть тех каторые могут менять свои размер в процессе работы программы а также эти масивы должны быть двумерными тоесть иметь какбы калонку и строку (типа матрицы)...
|
|||
|
||||
| Idsa |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 2086 Регистрация: 5.12.2006 Где: Томск Репутация: 14 Всего: 62 |
Об этом мы уже догадались |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
Ну тогда LinkedList. Правда его нужно напильником для полного соответствия задаче. И это, ИМХО, единственное решение этой проблемы. Почему? Да потому, что кто-то ведь должен знать где находится конкретный элемент. Если о положении элементов знает сам массив, то это... обычный массив объектов (каждый элемент массива -- ссылка на элемент в куче). |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
ivashkanet, речь о массиве и массиво-подобных контейнерах. Ты же говоришь о связном списке, который при всех своих достоинствах не позволяет брать элемент по индексу (и напильник в виде внешнего индексирующего массива или хэштейбла ему как пятая нога).
Модератор: дабы пресечь нарастающие отклонения от эвклидовой прямой темы топика, призываю не флеймить, уважаемые. -------------------- ![]() |
|||
|
||||
| Naum |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 743 Регистрация: 7.9.2005 Где: Саратов, ул. Поса дского, 298 Репутация: 8 Всего: 15 |
Еще пример - String. -------------------- У нас всего два праздника Новый год и ТЯПница. |
|||
|
||||
| ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 47 Всего: 149 |
mr.DUDA, это просто был ответ на пост Idsa (он в самом сердце цитаты).
Никто не говорит, что в этом листе будут храниться именно элементы. Там можно хранить массивы. ("ищут подходящий участок в памяти для новых данных и записывают их туда") Напильник -- это просто скрытие самой сути связного списка, который наружу выставит интерфейс обычного массива. То что я не буду пользоваться таким зверем это точно (меня более чем устраивает List<T>). Но теоретически он возможен.
ИМХО, это соответствует теме. |
|||
|
||||
| mr.DUDA |
|
|||
|
3D-маньяк ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 8244 Регистрация: 27.7.2003 Где: город-герой Минск Репутация: 110 Всего: 232 |
Тема закрыта.
-------------------- ![]() |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |