Модераторы: Partizan, gambit

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Двухмерный динамичиекий масив? 
:(
    Опции темы
WaReZMEN
Дата 14.2.2007, 04:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 3



Раньше я писал на Delphi И там были динамические масивы и любой размерности
(Mas: Array of Array of Integer)
А как токае сделать в C#?
PM MAIL ICQ   Вверх
Idsa
Дата 14.2.2007, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



Можно, например, сделать вот так:
Код

List<List<int>> a = new List<List<int>>;

К переменной a можно обращаться через индексаторы: a[i][j].


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
ivashkanet
Дата 14.2.2007, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



А если просто массив, то их два типа:
Код

int[][] // ---- массив массивов
int[,]  // ---- двумерный массив


P.S. Можно конечно и большемерные
PM MAIL WWW ICQ   Вверх
Naum
Дата 14.2.2007, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: 8
Всего: 15



Цитата(WaReZMEN @  14.2.2007,  05:58 Найти цитируемый пост)
динамические масивы

А в C# есть динамические массивы? Например, в VB.Net 
Код

Dim cells() as Cell
Redim cells(-1)
Do While (Condition())
   Redim Preserve cells(cells.Lenght)
   cells(Ubound(cells)) = New Cell()
Loop




--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
mr.DUDA
Дата 14.2.2007, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



А динамических массивов вообще не бывает в природе  smile 

Код
Module Module1
    Sub Main()
        Dim arr(10) As Integer
        arr(1) = 1
        ReDim Preserve arr(11)

    End Sub
End Module


Раскладывается в рефлекторе на:
Код
[STAThread]
public static void Main()
{
      int[] arr = new int[11];
      arr[1] = 1;
      arr = (int[]) Utils.CopyArray((Array) arr, new int[12]);
}





--------------------
user posted image
PM MAIL WWW   Вверх
Naum
Дата 14.2.2007, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: 8
Всего: 15



Цитата(mr.DUDA @  14.2.2007,  13:09 Найти цитируемый пост)
динамических массивов вообще не бывает в природе

Это понятно. Я имел ввиду средства языка для более простого добавления элемента в массив.
З.Ы. 
Цитата(mr.DUDA @  14.2.2007,  13:09 Найти цитируемый пост)
Utils.CopyArray

Че-то я не нашел такого, есть два internal класса Utils, но ни у одного из них нет метода CopyArray.
З.З.Ы Рефлектор не лучший способ узнать средства языка. Он отображает только логику. С синтаксисом есть небольшие недочеты. Встречали ли вы в коде сгенерированном рефлектором циклы while, for. И еще, это конечно мелочи, но, например, строки
Код

(System.IntPtr)0;
//и
System.IntPtr.Zero;

образуют разный IL-код, а в рефлекторе обе выглядят как System.IntPtrZero.
(Все вышесказанное относится только к Lutz Roeder's .NET Reflector)



--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
-Mikle-
Дата 14.2.2007, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 17
Всего: 59



Array.Copy(....);


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
Naum
Дата 14.2.2007, 13:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: 8
Всего: 15



-Mikle-, BR.


--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
marcusmae
Дата 14.2.2007, 14:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


Профиль
Группа: Участник
Сообщений: 874
Регистрация: 26.3.2006

Репутация: 22
Всего: 39



Цитата

Раньше я писал на Delphi И там были динамические масивы и любой размерности
(Mas: Array of Array of Integer)
А как токае сделать в C#?


WaReZMEN, мнений об ответах Вы не помещали, а ведь несовсем понятно, правильно ли поняли Ваш вопрос.

Помнится, 8 лет назад, когда занимались Pascal'ем и Fortran'ом, заходила речь о динамических переменных, и под этим понималась обычно динамическая инициализация с помощью new, dispose, alloc и т.п.

Цитата(mr.DUDA @  14.2.2007,  12:09 Найти цитируемый пост)
А динамических массивов вообще не бывает в природе

Код

LOGICAL l
ALLOCATABLE l(:,:,:)
! l is a 3-dimensional, allocatable, deferred shape logical array.

- динамический массив (с) Бартеньев  smile
эквивалентом будет
Код

bool[][][] l;


В этом смысле, C#-ная инициализация почти всюду динамическая, за исключением интегральных типов.

А если хотите pointer^ на Array of Array of Integer, то на C# указатели доступны только в режиме unsafe.

Это сообщение отредактировал(а) marcusmae - 14.2.2007, 15:50


--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
-Mikle-
Дата 14.2.2007, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 17
Всего: 59



[OFFTOP]
Цитата(Naum @  14.2.2007,  16:57 Найти цитируемый пост)
-Mikle-, BR.

сори, как это понять?  smile 

[/OFFTOP]


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
Naum
Дата 14.2.2007, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: 8
Всего: 15



 smile Спасибо.


--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
Idsa
Дата 14.2.2007, 18:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



А все-таки мне кажется, что автору нужно что-то вроде предложенного мной... Это, конечно, не массив, а коллекция, но функционал очень схож с дельфийскими динамическими массивами.
Цитата(mr.DUDA @  14.2.2007,  12:09 Найти цитируемый пост)
А динамических массивов вообще не бывает в природе

Поясни, пожалуйста.


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Exception
Дата 14.2.2007, 19:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



А что тут пояснять smile ? Так уж устроен в памяти массив, что у него фиксированный размер.
PM   Вверх
Idsa
Дата 14.2.2007, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



Цитата(Exception @  14.2.2007,  19:35 Найти цитируемый пост)
А что тут пояснять  ? Так уж устроен в памяти массив, что у него фиксированный размер.

Массив - это, в первую очередь, набор однотипных данных. А уж как он организован, вопрос открытый. Почему бы и не организовать массив, как коллекции, выделяя память динамически. Ну в конце концов, динамические массивы Delphi - это не массивы что ли?


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
-Mikle-
Дата 14.2.2007, 20:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 17
Всего: 59



Цитата(Idsa @  14.2.2007,  22:55 Найти цитируемый пост)
Ну в конце концов, динамические массивы Delphi - это не массивы что ли?


В языках высокого уровня, такие вещи типа выделения памяти скрываются от программиста. Но все равно, на низком уровне это так все и выглядит. Ну не может "набор однотипных данных" выделить просто дополнительную память! Как? А вдруг за ним еще какие-то данные расположены? Поэтому при изменении размера массива, нужно выделить новое место в памяти, и туда скопировать данные из старого. А понятие динамический массив существует только в рамках языков высокого уровня и за собой скрывает реализацию выделенния новой памяти.

В С# есть классы, которые тоже скрывают истинную сущность динамического выделения памяти. Тот же ArrayList внутри себя хранит массив, размером свойства Capacity. А когда массив заполнится, происходит выделение новой памяти с копированием туда данных из старого места. Таким образом прогрммист просто добавляет данные в коллекцию, и не задумывается о выделении новой памяти.


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
Idsa
Дата 14.2.2007, 20:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



Цитата(-Mikle- @  14.2.2007,  20:36 Найти цитируемый пост)
 Поэтому при изменении размера массива, нужно выделить новое место в памяти, и туда скопировать данные из старого. А понятие динамический массив существует только в рамках языков высокого уровня и за собой скрывает реализацию выделенния новой памяти.

Ну это-то понятно. Просто категоричное высказывание Дуды "динамических массивов не бывает" меня смутило smile
Mikle, пасиб  smile


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
-Mikle-
Дата 14.2.2007, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Невидимка Vingrad'а
***


Профиль
Группа: Экс. модератор
Сообщений: 1672
Регистрация: 22.6.2003
Где: Казахстан, Астана

Репутация: 17
Всего: 59



Цитата(Idsa @  14.2.2007,  23:46 Найти цитируемый пост)
категоричное высказывание Дуды "динамических массивов не бывает" меня смутило 

mr.DUDA мыслит исключительно низкоуровневым программированием  smile 


--------------------
Если тебе плюют в спину, значит ты впереди...
PM   Вверх
marcusmae
Дата 14.2.2007, 21:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


stravaganza
**


Профиль
Группа: Участник
Сообщений: 874
Регистрация: 26.3.2006

Репутация: 22
Всего: 39



Цитата

mr.DUDA мыслит исключительно низкоуровневым программированием   


и правильно делает  smile 

другое дело, что динамический - такое слово, что всегда рискуеш увязнуть в болоте тонкостей терминологии...

Это сообщение отредактировал(а) marcusmae - 14.2.2007, 21:16


--------------------
ἀπὸ μηχανῆς θεός
PM MAIL ICQ GTalk   Вверх
Idsa
Дата 14.2.2007, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



А вообще странно, что в fw нет коллекций, которые, при необходимости расширить коллекцию не копируют все данные, а ищут подходящий участок в памяти для новых данных и записывают их туда, не забывая при этом хранить ссылки на все участки памяти. Такой подход более предпочтителен с точки зрения производительности... но жизнь сборщика мусора усложняется на порядок smile


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
Exception
Дата 14.2.2007, 21:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 4525
Регистрация: 26.12.2004

Репутация: 29
Всего: 186



Цитата(Idsa @  14.2.2007,  20:55 Найти цитируемый пост)
Почему бы и не организовать массив, как коллекции, выделяя память динамически. 


А почему бы не называть его списком?

Добавлено @ 21:52 
Цитата(Idsa @  14.2.2007,  22:27 Найти цитируемый пост)
А вообще странно, что в fw нет коллекций, которые, при необходимости расширить коллекцию не копируют все данные, а ищут подходящий участок в памяти для новых данных и записывают их туда, не забывая при этом хранить ссылки на все участки памяти.


А List это что?
PM   Вверх
mr.DUDA
Дата 14.2.2007, 22:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Господа, давайте определимся тогда о чём мы говорим - о динамически выделяемом массиве или массиве с динамически изменяемым размером ? А то у нас получается испорченный телефон: кто про фому, а кто - про ерёму...


--------------------
user posted image
PM MAIL WWW   Вверх
Idsa
Дата 14.2.2007, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



Цитата(mr.DUDA @  14.2.2007,  22:47 Найти цитируемый пост)
Господа, давайте определимся тогда о чём мы говорим - о динамически выделяемом массиве или массиве с динамически изменяемым размером ? А то у нас получается испорченный телефон: кто про фому, а кто - про ерёму...

Второе smile
Цитата(Exception @  14.2.2007,  21:52 Найти цитируемый пост)
А почему бы не называть его списком?

Цитата(Exception @  14.2.2007,  21:52 Найти цитируемый пост)
А List это что?

Как заметил -Mikle-, при необходимости расширения размера коллекции происходит выделение новой памяти и копирование данных. А я же описал другой способ.




--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
WaReZMEN
Дата 15.2.2007, 02:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 683
Регистрация: 9.6.2006
Где: Россия, Санкт-Пет ербург

Репутация: нет
Всего: 3



Я задовал вопрос о динамических массивах тоесть тех каторые могут менять свои размер в процессе работы программы а также эти масивы должны быть двумерными тоесть  иметь какбы калонку и строку (типа матрицы)... 

 
PM MAIL ICQ   Вверх
Idsa
Дата 15.2.2007, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 2086
Регистрация: 5.12.2006
Где: Томск

Репутация: 14
Всего: 62



Цитата(WaReZMEN @  15.2.2007,  02:21 Найти цитируемый пост)
Я задовал вопрос о динамических массивах тоесть тех каторые могут менять свои размер в процессе работы программы а также эти масивы должны быть двумерными тоесть  иметь какбы калонку и строку (типа матрицы)... 

Об этом мы уже догадались smile Ну дык вопрос закрыт или что-то непонятно?


--------------------
Мой блог: alexidsa.blogspot.com
PM MAIL ICQ   Вверх
ivashkanet
Дата 15.2.2007, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



Цитата(Idsa @  14.2.2007,  22:13 Найти цитируемый пост)
Цитата(Exception)
Цитата(Idsa @  14.2.2007,  20:27 Найти цитируемый пост)
А вообще странно, что в fw нет коллекций, которые, при необходимости расширить коллекцию не копируют все данные, а ищут подходящий участок в памяти для новых данных и записывают их туда, не забывая при этом хранить ссылки на все участки памяти. Такой подход более предпочтителен с точки зрения производительности... но жизнь сборщика мусора усложняется на порядок
А List это что?
Как заметил -Mikle-, при необходимости расширения размера коллекции происходит выделение новой памяти и копирование данных. А я же описал другой способ.

Ну тогда LinkedList. Правда его нужно напильником для полного соответствия задаче.
И это, ИМХО, единственное решение этой проблемы.

Почему? Да потому, что кто-то ведь должен знать где находится конкретный элемент. 
Если о положении элементов знает сам массив, то это... обычный массив объектов (каждый элемент массива -- ссылка на элемент в куче).



PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 15.2.2007, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



ivashkanet, речь о массиве и массиво-подобных контейнерах. Ты же говоришь о связном списке, который при всех своих достоинствах не позволяет брать элемент по индексу (и напильник в виде внешнего индексирующего массива или хэштейбла ему как пятая нога).

Модератор: дабы пресечь нарастающие отклонения от эвклидовой прямой темы топика, призываю не флеймить, уважаемые.


--------------------
user posted image
PM MAIL WWW   Вверх
Naum
Дата 15.2.2007, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

Репутация: 8
Всего: 15



Цитата(-Mikle- @  14.2.2007,  21:36 Найти цитируемый пост)
В С# есть классы, которые тоже скрывают истинную сущность динамического выделения памяти.

Еще пример - String.



--------------------
У нас всего два праздника Новый год и ТЯПница.
PM MAIL ICQ   Вверх
ivashkanet
Дата 15.2.2007, 11:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодю потиху
****


Профиль
Группа: Участник Клуба
Сообщений: 3684
Регистрация: 23.2.2006
Где: Гомель, Беларусь

Репутация: 47
Всего: 149



mr.DUDA, это просто был ответ на пост Idsa (он в самом сердце цитаты).

Никто не говорит, что в этом листе будут храниться именно элементы. Там можно хранить массивы.
("ищут подходящий участок в памяти для новых данных и записывают их туда")
Напильник -- это просто скрытие самой сути связного списка, который наружу выставит интерфейс обычного массива.

То что я не буду пользоваться таким зверем это точно (меня более чем устраивает List<T>). Но теоретически он возможен.

Цитата(WaReZMEN @  15.2.2007,  01:21 Найти цитируемый пост)
Я задовал вопрос о динамических массивах тоесть тех каторые могут менять свои размер в процессе работы программы

ИМХО, это соответствует теме.
PM MAIL WWW ICQ   Вверх
mr.DUDA
Дата 15.2.2007, 12:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


3D-маньяк
****


Профиль
Группа: Экс. модератор
Сообщений: 8244
Регистрация: 27.7.2003
Где: город-герой Минск

Репутация: 110
Всего: 232



Тема закрыта.


--------------------
user posted image
PM MAIL WWW   Вверх
Страницы: (2) [Все] 1 2 
Закрытая темаСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0971 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.