Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - .NET

Страница: 1 | 2 | 3 |

 

  Вопрос: Многмерные массивы Добавлено: 04.07.06 17:38  

Автор вопроса:  ЛеШий

Ответить

  Ответы Всего ответов: 34  

Номер ответа: 16
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #16 Добавлено: 07.07.06 19:42
Вообще, у меня возникло подозрение что ты путаешь понятия хэщ-таблица и коллекция.

Это ты, по ходу что-то путаешь.. хэш-таблица относится к пространству имен System.Collections и чем же она по твоему является??? ничем другим, как разновидностью коллекции!!
И после этого ты будешь утверждать, что работать с Dictionary удобнее и этот метод будет якобы быстрее???

А где ты видел, чтоб я утверждал, что это будет работать быстрее? Я лишь говорил, что этот спрособ проще и удобнее!! Как мне кажется, ни одно из этих слов не означает быстрее..
каждое из которых позволяет якобы идентифицировать элемент

Не ЯКОБЫ... а позволяет идентифицировать элемент ОДНОЗНАЧНО!!! на это он и ключ!! И это его основная задача...
Перечитай вопрос.

Это тебе стоит перечитать топик, чтобы осознать простую вещь.. что я предложил человеку отказаться от геморроя с многомерными массива и предложил использовать хэш-таблицу.. и в моем варианте массив НЕ используется вообще! А отсюда вытекает следующее: Твой вопрос..
ну расскажи тогда как ты предлагаешь в твоем варианте изменять размер массива
является полным БРЕДОМ!

Ответить

Номер ответа: 17
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #17
Добавлено: 07.07.06 19:47
Ой, не пойму я вас! Хватит ругаться, идите лучше в дом, чай пить! :)

Ответить

Номер ответа: 18
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #18 Добавлено: 07.07.06 20:00
:-)))
да ладно те, Паш!! никто и не ругается..
Просто я не могу промолчать, когда тут юноша утвержает, что массив - это не объект, а хэш-таблица - это не коллекция!! И пытается при этом спорить совершенно не вникнив в суть разговора..

Ответить

Номер ответа: 19
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #19
Добавлено: 07.07.06 20:18
Вообще странен этот разговор...

Способ с HashTable мне интуитивно не нравится... Почему? Громоздко
(структуру делать, потом она будет бокситься, анбокситься... жуть).
Почему еще - нет инфраструктуры, присущей нормальным массивам и
List'ам - например, получение кол-ва элементов, размерностей по разным
измерениям и т.п.

Я мог бы согласиться, что это является решением проблемы. Но стоп!
Проблема то никем и не заявлена. В чем проблема? Я так и не смог
понять, перечитав тред дважды. И соответственно не смог понять
полезность этого метода в данном аспекте.

Ведь ресайз-то тут невозможен, ибо сайза нету :) Ну получается что-то
вроде "безразмерных" массивов как в каком-нибудь javaScript. Но этого
ли хотел автор?

Проблема была бы ясна, если бы автор вопроса чётко и ясно пояснил - а
дл чего собственно ему нужен массив и каким образом он используется в
программе. Создается такое впечатление, что собственно изменение
размера массива и нафик не надо, а это только каприз автора темы.
В общем, хотелось бы услушать ответ на такой вопрос. Тогда бы многое
прояснилось :)

Ответить

Номер ответа: 20
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #20 Добавлено: 07.07.06 21:18
Но тем не менее, имхо, решение принимать автору треда, мы-то тут чё спорим?.. мы предложили варианты, а какой вариант выбрать, повторюсь, решение за автором))

Ответить

Номер ответа: 21
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #21 Добавлено: 07.07.06 21:18
Это ты, по ходу что-то путаешь.. хэш-таблица относится к пространству имен System.Collections и чем же она по твоему является??? ничем другим, как разновидностью коллекции!!

ну и где я утверждал обратное?
Факт в том что хэш-таблица в данном случае является подмножеством колелкции (отличие в том, что хранит KayValuePair).

А где ты видел, чтоб я утверждал, что это будет работать быстрее? Я лишь говорил, что этот спрособ проще и удобнее!! Как мне кажется, ни одно из этих слов не означает быстрее.

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

Слух, если ты кроме классов XMLSerializer и HashTable больше никаких не выучил, то это не значит что они подходят для решения всех проблем и тем более не значит что нужно советовать из использовать везде где попало!

Не ЯКОБЫ... а позволяет идентифицировать элемент ОДНОЗНАЧНО!!! на это он и ключ!! И это его основная задача...

Элемнет можно идентифицировать и без использвания структуры и хэш-таблицы, также однозначно причем этот метод по скорости и удобству превосходит твою хваленую хэш-таблицу:

В случае с многомерным массивом:

A = Arr(10, 20, 30)

В случае с jugged array:
A = Arr(10)(20)(30)


Все.

Разве эти методы можно сравнить с предложеным
M.Item(New Key(3, 4, 5))

Который мало того что бредовый и неинтуитивен, так еще и работать будет в разы меньше???

ну расскажи тогда как ты предлагаешь в твоем варианте изменять размер массива
является полным БРЕДОМ!

Ладно, здесь видимо из принципа никогда не читают первый вопрос, поэтому я намекну побольше.
В вопросе идет речь об использовании Redim Preserve, так вот, я хочу увидеть, как ты выполнишь с HashTable аналогичную операцию.
Поскольку до тебя этот вопрос не доходит, я еще точнее поставлю вопрос.

Нужно удалить из хэш-таблицы все элементы, у которых значение полe J ключа больше 18.

А также добавить в хэш-таблицу элементы у которых значение поля I ключа будет от 0 до 100. Разумеется, если такие элеметы уже есть, то их заменять не нужно.
Добавленым элементам установить значение Nothing.

3-я задача - контролировать размерность того что у тебя там лежит.
Опять же для плохопонимающих - мне не нужно знать HashTable.Count, мне нужно знать, в каких пределах лежат значения поля K ключа хэш-таблицы.

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

Это тебе стоит перечитать топик, чтобы осознать простую вещь.. что я предложил человеку отказаться от геморроя с многомерными массива и предложил использовать хэш-таблицу.. и в моем варианте массив НЕ используется вообще! А отсюда вытекает следующее: Твой вопрос..

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

Ответить

Номер ответа: 22
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #22 Добавлено: 07.07.06 21:22
В вопросе идет речь об использовании Redim Preserve,

в вопросе идёт речь о попытке использования ReDim Preserve, а это не обязывает использование ReDim Preserve
Который мало того что бредовый и неинтуитивен, так еще и работать будет в разы меньше???
Ну и насколько медленнее? На 10-20 мс?

Ответить

Номер ответа: 23
Автор ответа:
 ЛеШий



Вопросов: 21
Ответов: 41
 Профиль | | #23 Добавлено: 10.07.06 12:58
Расскажу подробно что мне надо:

Имеется некая база данных (вообще-то рисунок AutoCAD, но он используется как раз как база данных). Так вот, на рисунке есть сечения. На сечениях есть связи. На связях есть точки. Каждая точка имеет два параметра. Мне надо записать эти параметры (я разделяю эти два параметра на два разных массива) в массивы (или во что получится), что бы знать в какой связи и сечении они находятся. Вот и получаются два трехмерных массива:

   Параметр1(номер_сечения, номер_связи, номер_точки)
   Параметр2(номер_сечения, номер_связи, номер_точки)

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

For … цикл по каждому сечению
  For … цикл по каждой связи
    For … цикл по каждой точке
      ReDim Preserve Параметр1(j)
      Параметр1(j) = …
      ReDim Preserve Параметр2(j)
      Параметр2(j) = …
      j = j + 1
    Next
  Next

  ReDim Preserve Массив1(x)
  Массив1(x) = Параметр1
  ReDim Preserve Массив2(x)
  Массив2(x) = Параметр2
  x=x+1
Next

В итоге получается следующее: создаются массивы Параметр1 и Параметр2:
Параметр1(0) = … 1 точка 1 связи
Параметр1(1) = … 2 точка 1 связи
Параметр1(2) = … 1 точка 2 связи
Параметр1(3) = … 2 точка 2 связи
Параметр1(4) = … 1 точка 3 связи
Параметр1(5) = … 2 точка 3 связи
Т.е. массив параметра1 по трем связям, которые имеют по две точки каждая.
Потом я заношу этот массив в Массив1 как отдельный элемент (т.е. массив массивов).

Далее мне надо отсортировать все это в следующей последовательности: Массив1(0)(0) Массив2(0)(0) Массив1(0)(1) Массив2(0)(1) и работать только с этими данными.
Я пытался создать статический массив Массив(4), занести в него указанные значения и поместить все это в динамический массив М(). В принципе сделать то же самое, только с сортировкой. Однако при записи второго элемента М(1), первый элемент М(0) перезаписывался этим же значением, и в итоге получался массив М(), глее все элементы равны последнему.
Пока на этом я и остановился.

Ответить

Номер ответа: 24
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #24
Добавлено: 10.07.06 13:24
Но неужели нельзя как-то узнать кол-во сечений, связей, точек, чтобы объявить массив так:

Dim Array(кол-во_сечений, кол-во_связей, кол-во_точек) As что-то-там

Ответить

Номер ответа: 25
Автор ответа:
 ЛеШий



Вопросов: 21
Ответов: 41
 Профиль | | #25 Добавлено: 10.07.06 18:26
Узнать конечно же можно. Только вот в каждом сечении может быть разное количество связей, и в каждой связи может быть от 2 до 4 точек.

Ответить

Номер ответа: 26
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #26
Добавлено: 10.07.06 18:44
Пробежаться св цикле и узнать максимальное пол-во этих связей/точек.
Потом уже объхявлять массив и считывать. ИМХО гуманней постоянных
ReDim'ов.

А лучше в таком случае вообще система вложенных массивов, как говорил
Артем.

Ответить

Номер ответа: 27
Автор ответа:
 Sacred Phoenix



ICQ: 304238252 

Вопросов: 52
Ответов: 927
 Профиль | | #27 Добавлено: 10.07.06 20:11
ну в этом случае, хэштейбл действительно стрёмновато...

Ответить

Номер ответа: 28
Автор ответа:
 EROS



Вопросов: 58
Ответов: 4255
 Профиль | | #28 Добавлено: 10.07.06 20:33
на рисунке есть сечения. На сечениях есть связи. На связях есть точки. Каждая точка имеет два параметра.

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

Ответить

Номер ответа: 29
Автор ответа:
 Павел



Администратор

ICQ: 326066673 

Вопросов: 368
Ответов: 5968
 Web-сайт: www.vbnet.ru
 Профиль | | #29
Добавлено: 10.07.06 21:35
Да, тоже верно. Пожалуй даже красивее будет.

Ответить

Номер ответа: 30
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #30 Добавлено: 10.07.06 21:45
а я бы в этом случае все эти сечения, связи, точки и параметры оформил бы в виде классов или структур со своими свойствами и методами...

Нафиг этот геморой?
Лучше сделать сериализацией!

Ответить

Страница: 1 | 2 | 3 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам