Я новичок в C# да и вообще в языках линейки C
Вопрос следуюший, можно ли создавать ассоциативные массивы — т.е. где
индексом выступает не число а слово.
Можно ли создавать смешанные массивы — т.е. много мерный массив, где первый
индекс — числовой а второй ассоциативный или наоборот.
И к примеру така я ситуация что есть много мерный масси, а данные в нем
смешанного типа, т.е. могут быть как и числого формата(int) так и
тестового(string). Как здесь быть, потому что если мы создаем массив то уже
срзу задаем ему тип, или выхода нет?
Здравствуйте, ivan23i, Вы писали:
I>Вопрос следуюший, можно ли создавать ассоциативные массивы — т.е. где I>индексом выступает не число а слово.
Hashtable
I>Можно ли создавать смешанные массивы — т.е. много мерный массив, где первый I>индекс — числовой а второй ассоциативный или наоборот.
Hashtable[]
I>И к примеру така я ситуация что есть много мерный масси, а данные в нем I>смешанного типа, т.е. могут быть как и числого формата(int) так и I>тестового(string). Как здесь быть, потому что если мы создаем массив то уже I>срзу задаем ему тип, или выхода нет?
А можно о Hashtable[] и о object[] с примером?
"AndrewVK" <forum@rsdn.ru> сообщил/сообщила в новостях следующее: news:362652@news.rsdn.ru...
From: AndrewVK модератор
Здравствуйте, ivan23i, Вы писали:
I>Вопрос следуюший, можно ли создавать ассоциативные массивы — т.е. где I>индексом выступает не число а слово.
Hashtable
I>Можно ли создавать смешанные массивы — т.е. много мерный массив, где первый I>индекс — числовой а второй ассоциативный или наоборот.
Hashtable[]
I>И к примеру така я ситуация что есть много мерный масси, а данные в нем I>смешанного типа, т.е. могут быть как и числого формата(int) так и I>тестового(string). Как здесь быть, потому что если мы создаем массив то уже I>срзу задаем ему тип, или выхода нет?
Hashtable предназначен для хранения ассоциативных данных, пар ключ-значение. Ключ и значение могут иметь любой тип. Ключ должен быть уникален. Пускай ключ будет строкой
Если тебе нужно чтобы старший индекс был числом то создаешь массив хеш-таблиц. Тогда выборка значения будет примерно такой:
Hashtable[] data = new Hashtable[3];
...
object val = data[2]["key"];
Если наоборот то в хештаблице храни массивы
Hashtable ht = new Hashtable();
ht.Add("key", new object[3]);
...
object val = ((object)ht["key"])[2];
Чтобы избавиться от приведения типов можно отнаследоваться от DictionaryBase и написать тпизированную хеш-таблицу.
Ну и еще один вариант — на основе набора индексов создавать комбинированный ключ, например "1|two|25.07.99" и хранить значение в единственной хеш-таблице. Для доступав по индексу придется написать свою обертку, генерирующую такой ключ.
Хм, не знаю насчте халявшиком.
В MSDN смотре нашел только как делать одномерные массивы, вот и спрасил про многмерные, с одномерными то все просто.
Но все равно спасибо
"AndrewVK" <forum@rsdn.ru> сообщил/сообщила в новостях следующее: news:362733@news.rsdn.ru...
From: AndrewVK модератор
Здравствуйте, ivan23i, Вы писали:
I>А можно о Hashtable[] и о object[] с примером?
Ну блин халавщики, даже MSDN не ситают .
object[] годится для хранения разнородных данных. Фокус в том что любой тип в дотнете приводится к object.
Hashtable предназначен для хранения ассоциативных данных, пар ключ-значение. Ключ и значение могут иметь любой тип. Ключ должен быть уникален. Пускай ключ будет строкой
Если тебе нужно чтобы старший индекс был числом то создаешь массив хеш-таблиц. Тогда выборка значения будет примерно такой:
Hashtable[] data = new Hashtable[3];
...
object val = data[2]["key"];
Если наоборот то в хештаблице храни массивы
Hashtable ht = new Hashtable();
ht.Add("key", new object[3]);
...
object val = ((object)ht["key"])[2];
Чтобы избавиться от приведения типов можно отнаследоваться от DictionaryBase и написать тпизированную хеш-таблицу.
Ну и еще один вариант — на основе набора индексов создавать комбинированный ключ, например "1|two|25.07.99" и хранить значение в единственной хеш-таблице. Для доступав по индексу придется написать свою обертку, генерирующую такой ключ.
... << RSDN@Home 1.1 beta 1 (np: тихо) >>
Оценить
Здравствуйте, ivan23i, Вы писали:
I>В MSDN смотре нашел только как делать одномерные массивы, вот и спрасил про многмерные, с одномерными то все просто.
В Шарпе есть понятие массив массивов, а есть многомерный массив. Точ то ты спрашивал (про ассоциативные массивы) вообще к языку не оносится. А то, что тебе показывал АВК — это как раз массивы одномерные (временами вложенные).
PS
И, пожалуйста, не оверквоть так сильно.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
ХМ, разве масисв массивов не одно и тоже что и много мерный массив? Стуктура то таже.
А убивать никого не надо, все мы учимся.
"VladD2" <forum@rsdn.ru> сообщил/сообщила в новостях следующее: news:362814@news.rsdn.ru...
From: VladD2 rsdn www.optim.ru/cs
Здравствуйте, ivan23i, Вы писали:
I>В MSDN смотре нашел только как делать одномерные массивы, вот и спрасил про многмерные, с одномерными то все просто.
В Шарпе есть понятие массив массивов, а есть многомерный массив. Точ то ты спрашивал (про ассоциативные массивы) вообще к языку не оносится. А то, что тебе показывал АВК — это как раз массивы одномерные (временами вложенные).
PS
И, пожалуйста, не оверквоть так сильно.
... << RSDN@Home 1.1 beta 1 >>
Оценить
Лучше бы просто обяснили понятным языком новичку, просто все то оно конечно хорошо, но пока языком пару месяцев не попользуешся почти любое руковдство или короткие ответы не помогут по причине не хватки знаний.
Здравствуйте, ivan23i, Вы писали:
I>Лучше бы просто обяснили понятным языком новичку, просто все то оно конечно хорошо, но пока языком пару месяцев не попользуешся почти любое руковдство или короткие ответы не помогут по причине не хватки знаний.
Ну, не знаю я с С++ и Дельфи за пять минут перелез. Конечно тонкости есть везде, но хэш-таблицы они и в африке хэш-таблицы (правда в Дельфи они появились только в шестерке).
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, ivan23i, Вы писали:
I>ХМ, разве масисв массивов не одно и тоже что и много мерный массив?
Да. Это разные вещи. Вот смотри:
// Массива массивов интов. Инициализируется пустым массивом.int[][] aryOfAryOfInt = new int[3][];
// А вот это уже многомерный массивint[,][] aryIntMatrix = new int[3,3];
// А вот разница
aryOfAryOfInt[0] = new int[2];
aryOfAryOfInt[1] = new int[1000];
aryOfAryOfInt[2] = null;
aryOfAryOfInt[0][1] = 123;
aryIntMatrix[0,1] = 123;
I>Стуктура то таже.
Нет. Как видишь массивы массивов гибче. К тому же с обычными массивами (в том числе и вложенными) дотнет работает командами MSIL-а которые переводятся непосредственно в команды процессора, а с многомерными работа идет через функции (не видимо для программиста). Это замедляет код.
PS
И еще раз говорю. Грохай все цитаты которые не нужны для понимания контекста вопроса/ответа.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, ivan23i, Вы писали:
I>Вопрос следуюший, можно ли создавать ассоциативные массивы — т.е. где I>индексом выступает не число а слово. I>Можно ли создавать смешанные массивы — т.е. много мерный массив, где первый I>индекс — числовой а второй ассоциативный или наоборот.
Пример:
using System;
using System.Collections;
namespace ArrayEx
{
class Class1
{
[STAThread]
static void Main(string[] args)
{
Hashtable[] hash;
hash=new Hashtable[3];
hash[0]=new Hashtable();
hash[0].Add("First",23);
Console.WriteLine(hash[0]["First"]);
}
}
}
Ая прогал только на php+Jscript и там нету хеш таблиц. И работа с массивами элементарнее. ни надо ни размерность ни тим указывать, что хочешь то и твориш, поэтому для меня ново, вот и спрашиваю.
Здравствуйте, ivan23i, Вы писали:
I>Ая прогал только на php+Jscript и там нету хеш таблиц. И работа с массивами элементарнее. ни надо ни размерность ни тим указывать, что хочешь то и твориш, поэтому для меня ново, вот и спрашиваю.
Размерность для массивов — всегда надо указывать! Ах, как было бы хорошо не указывать размер . Но "безразмерные" массивы всё же — существуют — это ArrayList.
Здравствуйте, ivan23i, Вы писали:
I>Ая прогал только на php+Jscript и там нету хеш таблиц. И работа с массивами элементарнее. ни надо ни размерность ни тим указывать, что хочешь то и твориш, поэтому для меня ново, вот и спрашиваю.
Это скриптовые языки. У них свои особенности. Они очень ограничены и многое им не дано. Но и там, и там есть библиотеки расширения и хэш-таблицы среди них точно имеются.
Вооще, я бы посоветова прочесть какую-нибудь толковую книку по программированию на компилируюемых языках. Раз уж выбрал Шарп, то лучше на нем. И еще очень полезно прочесть книгу по алгоритмам и структурам данных, ну, или на худой конец статью на которую я указывал.
Главное же нужно запомнить, что основное различие между компилируемыми языками и скриптовыми в том, что в сам язык обычно встроен минимальный набор самых необходимых действий. Все остальное в библиотеках. Ну, и нужно привыкнуть к тому, что все теперь типизировано и для решения проблем нужно искать (или писать свой) класс.
... << RSDN@Home 1.1 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Хеш-таблиц там точно нет, если бы были то я бы думаю что сталкивался.
Статью прочту обязательно.
А что касаемо книги, купил себе C# и платформа .Net Эндрю Троелсена — r сожелению не все подробно расписано. Поэтому что не понятно то и спрашиваю. Я думаю не смертельно же если человеку что-то не понятно. помоему это хорошо что есть вопросы — значит он думает.
Если не сложно посовеетуй книжку по алгоритмам и структурам данных.
Ну а ктому что все типизированно. начинаю привыкать. Не знаю просто мне почему т понравился C#, да и для разработки КИС он помоему самое подходящее решение!
Здравствуйте, ivan23i, Вы писали:
I>Ая прогал только на php+Jscript и там нету хеш таблиц. И работа с массивами элементарнее. ни надо ни размерность ни тим указывать
Значит там внутри аналог нетовского ArrayList. Ему вот тоже ни размерность ни тип указывать не нужно.
Здравствуйте, ivan23i, Вы писали:
I>Хеш-таблиц там точно нет, если бы были то я бы думаю что сталкивался.
Точно есть
An array in PHP is actually an ordered map. A map is a type that maps values to keys. This type is optimized in several ways, so you can use it as a real array, or a list (vector), hashtable (which is an implementation of a map), dictionary, collection, stack, queue and probably more.
VD>Нет. Как видишь массивы массивов гибче. К тому же с обычными массивами (в том числе и вложенными) дотнет работает командами MSIL-а которые переводятся непосредственно в команды процессора, а с многомерными работа идет через функции (не видимо для программиста). Это замедляет код.