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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как вставить колонки в двумерный массив? 
:(
    Опции темы
ZUBR80
Дата 22.8.2006, 10:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Есть массив Cells(5,5) as Integer
Как добавить колонку в этот массив например на позицию 3, т.е. чтобы все значения при этом сместились.

Например, было:

1 2 2 3 8
1 2 2 1 1
2 2 4 7 9
2 1 8 7 7
2 3 4 5 8 

И чтобы стало:

1 2 0 2 3 8
1 2 0 2 1 1
2 2 0 4 7 9
2 1 0 8 7 7
2 3 0 4 5 8 


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


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


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

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



ZUBR80, вручную, батенька, вручную smile
P.S. "Cells(5,5)"  --- а это не Excel случаем? Там можно вставить колонку.
PM MAIL WWW ICQ   Вверх
Bogdan1024
Дата 22.8.2006, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Это статический массив? Тогда тебе нужно сначала присвоить
Cells = Nothing (или что там в VB.NET для слова null?)
Потом создать новый массив Cells(6,5), дальше сам наверно знаешь что делать.


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


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


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

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



Код
using System;

public class Program
{
    public static void Main()
    {
        // исходные данные
        int[,] array =
        {
            {1, 2, 2, 3, 8},
            {1, 2, 2, 1, 1},
            {2, 2, 4, 7, 1}, 
            {2, 1, 8, 7, 7},
            {2, 3, 4, 5, 8}
        };
        int insertColumnIndex = 2;

        // кол-во колонок и строк
        int numRows = array.GetLength(0);
        int numCols = array.GetLength(1);

        // вставка колонки
        int[,] resized = new int[numRows, numCols + 1];
        for (int iRow = 0; iRow < numRows; iRow++)
        {
            for (int iCol = 0; iCol < numCols; iCol++)
            {
                if (iCol >= insertColumnIndex)
                    resized[iRow, iCol + 1] = array[iRow, iCol];
                else
                    resized[iRow, iCol] = array[iRow, iCol];
            }
        }
    }
}



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


Шустрый
*


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

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



А если массив большой, то наверное использовать метод Array.Copy для порций данных намного быстрее, чем поэлементное копирование? Или я ошибаюсь?
PM MAIL   Вверх
mr.DUDA
Дата 22.8.2006, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(ZUBR80 @  22.8.2006,  11:13 Найти цитируемый пост)
А если массив большой, то наверное использовать метод Array.Copy для порций данных намного быстрее, чем поэлементное копирование? Или я ошибаюсь?

Array.Copy не подходит для прямоугольных двумерных массивов.


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


Эксперт
***


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

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



Цитата
А если массив большой, то наверное использовать метод Array.Copy для порций данных намного быстрее, чем поэлементное копирование? Или я ошибаюсь?

Ошибаешься, мэнэджд код получается одинаковый, это тебе не С smile. Даже медленнее потому что там всякие манипуляции с объектами, проверки, боксинг-анбоксинг и тд.
Цитата(mr.DUDA @  22.8.2006,  11:55 Найти цитируемый пост)
Array.Copy не подходит для прямоугольных двумерных массивов.

Можно извратиться и сделать одномерный массив из струтур-массивов smile


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


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


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

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



Цитата(Bogdan1024 @  24.8.2006,  12:37 Найти цитируемый пост)
Ошибаешься, мэнэджд код получается одинаковый, это тебе не С . Даже медленнее потому что там всякие манипуляции с объектами, проверки, боксинг-анбоксинг и тд.


Судя по всему - быстрее, т.к. реализация вынесена в unmanaged код:
Код
[MethodImpl(MethodImplOptions.InternalCall), ReliabilityContract(Consistency.MayCorruptInstance, Cer.MayFail)]
internal static extern void Copy(Array sourceArray, int sourceIndex, Array destinationArray, int destinationIndex, int length, bool reliable);




--------------------
user posted image
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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