русский
Germany.ruForen → Архив Досок→ Programmierung

Массивчик бы... двумерный.

3347  1 2 alle
Murr_0001 завсегдатай06.01.11 14:12
Murr_0001
NEW 06.01.11 14:12 
Хочу массивчик. С# only.
Двумерный.
Авторесайзебельный по обоим осям.
С индексацией целыми, строками и методами объектов.
Тип данных - будет определен позднее.
Набор операций - тоже позднее, не критично, можно с агрегацией.
Кто видел слышал - поделитесь, плс...
ЗЫ. Ленивый Я что-то стал - нужен массив для двух проектов и лениво написать...
#1 
viger2 свой человек06.01.11 17:02
viger2
NEW 06.01.11 17:02 
in Antwort Murr_0001 06.01.11 14:12
как насчет ArrayList?
http://msdn.microsoft.com/en-us/library/system.collections.arraylist.aspx
В ответ на:
Тип данных - будет определен позднее.

если это стрингс то проблем не будет. С фиксированными по размерам видам данных думаю могут возникнуть проблемки...
все что вы сделаете в интернете может быть использовано против вас!
#2 
Murr_0001 завсегдатай06.01.11 20:01
Murr_0001
NEW 06.01.11 20:01 
in Antwort viger2 06.01.11 17:02

как насчет ArrayList?
-----
Нее... хочу полный врапер для проблемы. Массив там всегда двумерный, но не всегда можно вычислить размер - это основное.
думаю могут возникнуть проблемки.
------
Нее, это точно не проблема - конвертну что там будет в интерфейсы - они всегда одинаковые по размеру... и функциональности.
#3 
Knusprig знакомое лицо07.01.11 09:11
Knusprig
NEW 07.01.11 09:11 
in Antwort Murr_0001 06.01.11 20:01
В ответ на:
Массив там всегда двумерный, но не всегда можно вычислить размер - это основное.

Тогда ArrayList of ArrayLists.
Еще не знаю как в шарповнике, а в жабе есть HashMap - и двумерный, и размер не ограничен.
Девки спорили на даче о свойствах ряда Фибоначчи
#4 
Murr_0001 завсегдатай07.01.11 09:51
Murr_0001
NEW 07.01.11 09:51 
in Antwort Knusprig 07.01.11 09:11
Тогда ArrayList of ArrayLists.
------
Это - да. Но там надо писать кучу обвязки - добавить по размерности, перересайзить, индексеры... Вот это и хочу взять готовое... Лентяй?
HashMap
-------
Есть HashMap, но вроде не двумерный... В Жабе, кстати, тоже не припомню двумерного...
#5 
mickle_ak знакомое лицо07.01.11 10:06
NEW 07.01.11 10:06 
in Antwort Murr_0001 07.01.11 09:51
двухмерным будет, если ключ сделать составным (типа i+","+j ) .
Правда с итерированием проблемы, да и размер без пол-литры не узнаешь.
Зато сразу разреженный

Прошу ногами не бить - щутка
#6 
Murr_0001 завсегдатай07.01.11 10:10
Murr_0001
NEW 07.01.11 10:10 
in Antwort mickle_ak 07.01.11 10:06
щутка
------
+1
Но вообще доходит до смешного - задача не настолько сложная, чтобы было невозможно написать,
и не настолько редко встречающаяся, чтобы в ней не было необходимости... и все же готовое
решение найти не так просто.
#7 
Knusprig знакомое лицо07.01.11 10:52
Knusprig
NEW 07.01.11 10:52 
in Antwort Murr_0001 07.01.11 09:51
В ответ на:
Лентяй?

Конечно лентяй!
Но если б не лень, мы бы до сих пор носились по джунглям в поисках еды и одежды.
В ответ на:
В Жабе, кстати, тоже не припомню двумерного...

Он вроде имплементирован в виде массива списков. По хашкоду идет добавление объекта в массив, потом в конец списка.
Девки спорили на даче о свойствах ряда Фибоначчи
#8 
mickle_ak знакомое лицо07.01.11 11:50
NEW 07.01.11 11:50 
in Antwort Knusprig 07.01.11 10:52
В ответ на:
Он вроде имплементирован в виде массива списков. По хашкоду идет добавление объекта в массив, потом в конец списка.

Это ИМХО стратегия разрешения коллизий хэш-функции. Сам "ассоциативный массив" остается "одномерным". Ведь пользователь не может выбрать позицию в списки или узнать его размер.
#9 
Knusprig знакомое лицо07.01.11 12:31
Knusprig
07.01.11 12:31 
in Antwort mickle_ak 07.01.11 11:50
В ответ на:
Ведь пользователь не может выбрать позицию в списки или узнать его размер.

Это да.
Зато можно использовать ключи, как ты предложил, типа "[11][22]" и симулировать двухмерный массив
Таким образом мы получаем и динамический размер, и готовый метод поиска.
Девки спорили на даче о свойствах ряда Фибоначчи
#10 
AlexNek коренной житель01.02.11 19:04
AlexNek
NEW 01.02.11 19:04 
in Antwort Murr_0001 07.01.11 10:10
В ответ на:
и не настолько редко встречающаяся, чтобы в ней не было необходимости

Как бы это сформулировать... Ну не кошерно это, для объектной среды.
Кроме "математики", никогда такой потребности не возникало.
#11 
Murr патриот01.02.11 19:28
Murr
NEW 01.02.11 19:28 
in Antwort AlexNek 01.02.11 19:04
Кроме "математики", никогда такой потребности не возникало.
------
Увы, как раз математика...
Первая часть - вычисление транзитивного замыкания...
Вторая - экспертная система или нейронка - еще не определился чем решать задачу...
Но в любом случае - двумерка, переменного размера...
#12 
AlexNek коренной житель01.02.11 20:42
AlexNek
NEW 01.02.11 20:42 
in Antwort Murr 01.02.11 19:28
В ответ на:
Увы, как раз математика

скорость, сторонние библиотеки?
В принипе, любой х мерный, массив можно перевести на объектный уровень. Тот же массив объектов с пропертями - уже двумерный массив, проблема в эффективности операций.
В ответ на:
Но в любом случае - двумерка

Это ты зациклился. Я как-то работал в паре с математиком (точнее надо было очеловечить его код) - у него были исключительно Х-мерные динамические массивы (правда это был С++), отлично можно было перевести на объекты, даже и быстрее получалось иногда. Главный плюс - код уже можно было понять.
#13 
Murr патриот01.02.11 21:46
Murr
NEW 01.02.11 21:46 
in Antwort AlexNek 01.02.11 20:42
скорость, сторонние библиотеки?
------
Не критично. Все свое.
В принипе, любой х мерный, массив можно перевести на объектный уровень.
------
Можно.
Но в данном случае нужно наоборот - сделать двумерное представление-контейнер
и забыть об проблеме с представлением.
Главный плюс - код уже можно было понять.
------
Это - да. И именно это Я и ищу.
Дело в том, что значительная часть имеющегося кода - пуре Си. И он по природе -
процедурный. И первая часть, которую надо из него выкинуть - операции по управлению
памятью. Там они почти статические - один вызов malloc\free.
#14 
AlexNek коренной житель02.02.11 00:29
AlexNek
NEW 02.02.11 00:29 
in Antwort Murr 01.02.11 21:46
В ответ на:
Дело в том, что значительная часть имеющегося кода - пуре Си

почти точная копия моего "математика". Только он сишные "проги" в обвертке плюсов писал.
Я был страшно раз когда удавлось убрать хоть одну размерность массива.
Если нет никаких критических требований подумай чуть больше и не пользуй двумерный массив напрямую. У меня было очень мало мест где имелся смысл в использовании х-мерных массивов. Зато даже после первой итерации, можно было уже хоть немного понять смысл работы алгоритма, хотя при этом перевод делался "вслепую". (То есть просто смотрел какие куски можно изменить, не понимая как это все у него работает)
Некоторые его функции приходилось измерять в метрах (!) Задолбался листы распечаток склеивать на полу.
В ответ на:
И первая часть, которую надо из него выкинуть

Не делай только все сразу.
#15 
Murr патриот02.02.11 03:24
Murr
NEW 02.02.11 03:24 
in Antwort AlexNek 02.02.11 00:29
почти точная копия моего "математика".
-----
Когда он писался - ничего другого доступно не было... Ну кроме Кобола с Фортраном...
и не пользуй двумерный массив напрямую.
------
А кто сказал, что нужен именно двумерный массив? Пусть он внутри будет каким может!!!
А вот снаружи он мне нужен именно таким - двумерным. Указанные задачи, разумеется,
векторизуются, но как это будет внутри - мне не важно...
можно было уже хоть немного понять смысл работы алгоритма
------
Гхммм.... Фортрановского спагетти Я в свое время накушался... Сейчас - сильно подумаю -
а надо ли... и скорее всего - ну его нах...
Некоторые его функции приходилось измерять в метрах
------
Тогда так учили и так писали.
У меня была одна програмка в доработке. Измеряла и обсчитывала тех.процесс варки пива.
Где-то 130 разных датчиков... каждый - с хитрой функцией преобразования... примерно
10-15 строк на датчик... Портянку представил? Ну для полноты картины - ограничения
tiny-модели борланда под досом... и куча переходов по коду... последние - непонятно
зачем - возможно пытались бороться за время...
По задаче - надо было добавить замер и обсчет еще пары десятков датчиков. Разумеется,
это все не влезло - ни в память, ни во временной цикл измерений...
Результат - массивчик - две с половиной страницы данных - по одной строке на датчик,
и примерно 40 строк кода... ну и все запихнуто в бакграунд - персонал мог играть в шахматы
не мешая процессу...
Не делай только все сразу.
-----
:)
#16 
AlexNek коренной житель02.02.11 18:48
AlexNek
NEW 02.02.11 18:48 
in Antwort Murr 02.02.11 03:24
В ответ на:
А вот снаружи он мне нужен именно таким - двумерным

Я имел в виду именно "снаружи", а внутренности можно было уже написать по пару раз, пока мы тут болтаем.
В ответ на:
и скорее всего - ну его нах

В итоге так и поступили, но пока не было нового решения надо было (!) поддерживать старое.
В ответ на:
У меня была одна програмка в доработке

Ты видимо, не совсем внимательно прочитал, речь шла о Функциях! Гото и циклы надо было при помощи метровой линейки вырисовывать
#17 
Murr патриот04.02.11 00:25
Murr
NEW 04.02.11 00:25 
in Antwort AlexNek 02.02.11 18:48
можно было уже написать по пару раз
------
Читай выше - ЛЕ НИ ВО... хочу готовый... налаженный, протещенный и опробованный не одним прогером...
речь шла о Функциях!
------
А ты перемножь цифирьки...
надо было
------
Ты игру "Убеги от людоеда" на Фортране ни разу не видел? Там нет функций... вообще... сплошные assign & goto
#18 
AlexNek коренной житель04.02.11 19:34
AlexNek
NEW 04.02.11 19:34 
in Antwort Murr 04.02.11 00:25
В ответ на:
хочу готовый

это пойдет?
В ответ на:
http://msdn.microsoft.com/en-us/library/2s05feca%28vs.80%29.aspx

В ответ на:
А ты перемножь цифирьки

Та,... размером проекта никого не удивишь.
#19 
Murr патриот04.02.11 21:54
Murr
NEW 04.02.11 21:54 
in Antwort AlexNek 04.02.11 19:34
это пойдет?
------
Неа...
В ответ на:

// Declare the array of two elements:
int[][] arr = new int[2][];

Мне нужно что-то такое
В ответ на:

TFlatTable flatTable = new TFlatTable();
flatTable.Size(10, 15);
// работаем с элементами, индексеры - любого типа
TFlatTableIndex x = "54gg";
TFlatTableIndex y = "g678";
flatTable[x][y] = "xex"; // любой тип
...
// нашли, что 10х15 - не то
flatTable.Size.X = 20; // имеем 20х15
// старые индексы дают доступ к старому содержимому
// желательно еще что-то такое
flatTable.ForEach(method);
flatTable[x].ForEach(method);
flatTable[][y].ForEach(method);

Примерно так... Как оно будет внутри - не суть важно, но снаружи - двумерный массив...
размером проекта никого не удивишь.
------
Ты упускаешь тип использованной модели памяти.
#20 
1 2 alle