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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Динамические массивы, как работать? 
V
    Опции темы
Ch0bits
  Дата 22.4.2005, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

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



Как работать в C# с динамическими массивами?
Как добавлять и удалять элементы из массива?
Как получить длину каждого измерения массива в отдельности?
smile
PM WWW   Вверх
Kurt
Дата 22.4.2005, 14:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


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

Репутация: 20
Всего: 36



Код

...
using System.Collections;
...
static void Main(string[] args)
{
ArrayList arr = new ArrayList();
for(int i=0; i<10; i++)
{
         arr.Add(i);
}
Console.WriteLine("Array has {0} elements!",arr.Count);
arr.RemoveAt(1);
arr.RemoveAt(7);
Console.WriteLine("Array has {0} elements:",arr.Count);
for(int i=0; i<arr.Count; i++)
{
         Console.WriteLine(arr[i]);
};
Console.ReadLine();
}



--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
Ch0bits
Дата 22.4.2005, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

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



Да я знал про это.
Я имею ввиду, например:
int[,] Matrix;
Как с Matrix это всё провернуть???
PM WWW   Вверх
Kurt
Дата 22.4.2005, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


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

Репутация: 20
Всего: 36



Насколько я знаю, добавлять/удалять элементы в такой массив нельзя.
Можно только выделить какой-то участок памяти и дальше с ним работать.
А по отдельности добавлять/удалять элементы - нет.

З.Ы. Именно поэтому я ответил про ArrayList. Для него это возможно.


--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
alir
Дата 22.4.2005, 18:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 2
Всего: 4



Цитата
Как работать в C# с динамическими массивами?

Динамические массивы с C# являются объектами соответсвующих классов, определяемых нужные типы. По умолчанию при содании такого массива, его элементами становятся null, потому я не много не понимаю такого вопроса:
Цитата
Как удалять элементы из массива?

Но посмотрим что можно:
Код

//создаем дин. массив (объект!)
int[,] Matrix = new int[3,3];
//заполняем (возьмем самое простое)
for (int i=0; i<3; i++)
      for (int j=0; j<3; j++)
           Matrix[i,j] = j;
//"удаляем" :) все
for (int i=0; i<3; i++)
      for (int j=0; j<3; j++)
           Matrix[i,j] = null;
...
//возращаем длину массива
Matrix.Length();
...


Там куча возможностей - ты уж это сам посмотри.

Это сообщение отредактировал(а) alir - 22.4.2005, 21:57
PM MAIL ICQ   Вверх
Kurt
Дата 22.4.2005, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Увлеченный
***


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

Репутация: 20
Всего: 36



Ну, не так уж и куча.
Добавить элемент, как хотел Vadim999, к такому массиву невозможно.
Кроме того, на строчку:
Код
Matrix[i,j] = null;

VS огрызается:
Цитата(VS2003)
Cannot convert null to 'int' because it is a value type




--------------------
Для корабля, который не знает куда плыть, нет попутного ветра... ((С) Архимед)
...
Все знают, что это невозможно. Но случайно находится невежда, который этого не знает. Он-то и делает открытие.. ((С) А. Эйнштейн)
PM ICQ   Вверх
Ch0bits
Дата 22.4.2005, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

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



alir
Очепятки в коде и массив не динамический.

Kurt
А незьзя этот ArrayList как-нибудь сделать двухмерным?
Или если использовать статический многомерный массив, например тот же int[,] Matrix=new int[5,10]
то как получить длину каждого его измерения, ведь .Length возвращает общее количество элементов.

Это сообщение отредактировал(а) Vadim999 - 22.4.2005, 20:17
PM WWW   Вверх
alir
Дата 22.4.2005, 21:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

Репутация: 2
Всего: 4



Цитата
Очепятки в коде и массив не динамический.

Что же по твоему динамический массив?

PM MAIL ICQ   Вверх
Cr@$h
Дата 22.4.2005, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Исследователь
***


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

Репутация: 1
Всего: 41



Цитата(Vadim999 @ 22.4.2005, 21:16)
А незьзя этот ArrayList как-нибудь сделать двухмерным?

Тема интересная. Попробуй использовать преобразование ArrayList в int[]. Лови пример из Шилдта.
Код

// Преобразование ArrayList-коллекции в массив. 
 
using System; 
using System.Collections; 
 
class ArrayListToArray { 
  public static void Main() { 
    ArrayList al = new ArrayList(); 
     
    // Добавляем элементы в динамический массив. 
    al.Add(1); 
    al.Add(2); 
    al.Add(3); 
    al.Add(4); 
 
    Console.Write("Содержимое: "); 
    foreach(int i in al) 
      Console.Write(i + " "); 
    Console.WriteLine(); 
 
    // Создаем обычный массив из динамического. 
    int[] ia = (int[]) al.ToArray(typeof(int)); 
    int sum = 0; 
 
    // Суммируем элементы массива. 
    for(int i=0; i<ia.Length; i++) 
      sum += ia[i]; 
 
    Console.WriteLine("Сумма равна: " + sum); 
  } 
}


В чем сложность: как добавлять в двумерный массив. В ArrayList - в конец и все, а в двумерном как реализовать? В смысле куда добавлять, куда расширять размерность экстенты, по какому направлению? Здесь процедуру с одним-двумя параметрами как минимум делать придется. Одним Add'ом не обойтись...
Мой вариант - создай экземпляр типа ArralList[]. Тогда каждя строчка (или столбец, как угодно) будет расширяема. НО №1 - не все одновременно, т.е. расширяя одну строчку - придется обнулять и создавать новые элементы в других, чтобы размерность была "MxN". НО №2 - число самих динамических строк нельзя будет менять динамически.
PM MAIL ICQ   Вверх
mr.DUDA
Дата 25.4.2005, 07:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Vadim999 @ 22.4.2005, 20:16)
Или если использовать статический многомерный массив, например тот же int[,] Matrix=new int[5,10]
то как получить длину каждого его измерения, ведь .Length возвращает общее количество элементов.


Легко:
Код
int [,] Matr = new int[10,20];

int W = Matr.GetLength(0); // 10
int H = Matr.GetLength(1); // 20



--------------------
user posted image
PM MAIL WWW   Вверх
Гость_Сергей
Дата 30.4.2005, 14:33 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











По поводу того, как ArrayList сделать двумерным: сам ArrayList делать двумерным ИМХО смысла нет, но можно делать так:
Код

ArrayList ar = new ArrayList();
string[] str = string[2];
int numb = new numb[3];
ar.Add(str);
ar.Add(numb);

То есть что тебе надо, то и добавляй в этот ArrayList
P.S.: Может, я просто не понял вопроса... Тогда сорри
  Вверх
SpaceIQ
Дата 19.4.2012, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



На будущее, хороша статья о динамических массивах:
Динамические массивы в C#
PM MAIL   Вверх
Ch0bits
Дата 20.4.2012, 21:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

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



Спустя 7 лет зашел на форум и опа! SpaceIQ, поднял мою тему!  smile 
PM WWW   Вверх
SpaceIQ
Дата 26.4.2012, 22:35 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Как дела старичок? Чего делал 7 лет?  smile 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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