Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 11.03.2022
Сообщений: 41
1

Одномерный, Двумерный, Трёхмерный и т.д. массивы

18.09.2022, 17:09. Показов 574. Ответов 11
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть ли способ сделать свой класс, где в Конструкторе можем задавать длину каждого блока под массива. Наподобие :
C#
1
public CustomArray(params int[] collection)
И уже автоматически, по заданным параметрам, строить нужный нам многомерный массив.

Я пробовал сделать поля класса самого класса (Как тока и не пробовал: использовал массив типа самого класса для поля _array, использовал обычный тип класса для поля _array ):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
    public class CustomArray
    {
        private CustomArray[]? _array { get; private set; }
 
        private int[]? _listElements { get; private set; }
 
        private int _countElements { get; private set; }
 
        private int _rankArray { get; private set; }
 
        public CustomArray(params int[] collection)
        {
            foreach (var item in collection)
            {
                _array = new CustomArray[item];
            }
            _rankArray = collection.Length;
            _countElements = collection[^1];
            _listElements = new int[_countElements];
        }
    }
Но я не знаю, как именно подойти к нужному блоку под массива и там определить данные.
Это прототип, так что сильно не бейте...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.09.2022, 17:09
Ответы с готовыми решениями:

Одномерный и двумерный массивы
Добрый день! Задачка на массивы: В начале программы каждый массив необходимо заполнить...

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

Массивы (одномерный и двумерный)
задача: дан массив чисел a(n). вывести массив b(n), в котором bi=a1+a2+..+ai, i=1,2..n ...

одномерный и двумерный массивы
1.составить алгоритм,с помощью одномерного массива Заполнить массив числами 2.1, 2.2, 2.3, …, 2.18....

Одномерный и двумерный массивы.
Одномерные массивы: Двумерные массивы: Помогите, пожалуйста. с решением задач. Буду...

11
Модератор
Эксперт .NET
15806 / 10961 / 2845
Регистрация: 21.04.2018
Сообщений: 32,164
Записей в блоге: 2
18.09.2022, 18:10 2
Цитата Сообщение от hSpek Посмотреть сообщение
Есть ли способ сделать свой класс, где в Конструкторе можем задавать длину каждого блока под массива.
Непонятно.
Поясните и желательно с примерами.
0
1 / 1 / 0
Регистрация: 11.03.2022
Сообщений: 41
18.09.2022, 18:43  [ТС] 3
По стандарту у нас задаются массивы на подобие :
C#
1
2
int[] array = { 1, 2, 3 };
int[,] array = { { 1, 2, 3 }, { 4, 5, 6 } };
Мне бы хотелось прописывать свой массив примерно так:
C#
1
2
3
4
// трехмерный массив
CustomArray array = new CustomArray(1, 2, 3)
// эта запись эквивалентна этой  
int[,,] array = new int[1, 2, 3]  { { { 1, 2, 3 }, { 4, 5, 6 } } };
То есть, в скобках указывается размер каждого блока многомерного массива и многомерность этого массива определяется количество
C#
1
2
3
4
// одномерный массив
CustomArray array = new CustomArray(1)
// эта запись эквивалентна этой  
int[] array = new int[1] { 100 };
Думаю установку элементов сделать через Set-метод вида:
C#
1
public void SetValue(int value, params int[] positions)
где position - это indx-ы нашего значения в многомерном массиве.

Просто в разных проектах используются разные виды стандартных многомерных массивов (другие Коллекции типа Array, List и методы присущие им лучше избегать. Я понимаю, что они гораздо лучше будут вести себя в этой задаче) и чтобы постоянно не писать один и тот же код, хочу создать отдельный класс (или Библиотеку классов, еще не решил) с определенными метода, и в дальнейшем ими пользоваться.
0
Модератор
Эксперт .NET
15806 / 10961 / 2845
Регистрация: 21.04.2018
Сообщений: 32,164
Записей в блоге: 2
18.09.2022, 18:58 4
Цитата Сообщение от hSpek Посмотреть сообщение
Мне бы хотелось прописывать свой массив примерно так:
То есть, по сути, вы хотите сделать универсальный инициализатор для массивов любой размерности?
Тогда придётся работать с ним через методы Array, а не индексаторы.
0
1 / 1 / 0
Регистрация: 11.03.2022
Сообщений: 41
18.09.2022, 19:04  [ТС] 5
Если я правильно понял, то скорее всего вы имели ввиду метод CreateInstance(...) в классе Array.
А можно как-то обойтись без него?

Хотелось бы увидеть что-то типа BinTree, где каждый узел имеет поля своего же класса.
0
Модератор
Эксперт .NET
15806 / 10961 / 2845
Регистрация: 21.04.2018
Сообщений: 32,164
Записей в блоге: 2
18.09.2022, 19:08 6
Цитата Сообщение от hSpek Посмотреть сообщение
Просто в разных проектах используются разные виды стандартных многомерных массивов
Вообще, многомерные массивы очень редко используются в программировании.
Кроме математических методов, даже в голову не приходит, где их можно с умом применить.

Использование массива, с точки зрения ООП, подразумевает, что все его элементы функционально равны.
Например в математической матрице СЛАУ или трансформации - все элементы это коэффициенты переменных измерений.
А например представить данные Person string массивом это уже неверно. Так как ФИО это хоть и стринги, но заменить фамилию на имя нельзя. То есть они функционально различны.

Добавлено через 2 минуты
Цитата Сообщение от hSpek Посмотреть сообщение
Хотелось бы увидеть что-то типа BinTree, где каждый узел имеет поля своего же класса.
Дерево и Массив - это функционально разные типы.
Массив неизменяем. Дерево может меняться как по количеству узлов на каждом уровне, так и по их глубине.
1
Эксперт по электронике
3076 / 2149 / 548
Регистрация: 04.09.2018
Сообщений: 7,383
Записей в блоге: 4
18.09.2022, 19:30 7
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Кроме математических методов, даже в голову не приходит, где их можно с умом применить.
Если, например, приложения работают с некими внешними ВС, требующими инициализации по некоторым переменным, то матрицы значений (читай двумерные массивы) используются только шум стоит... )
Очень удобно, вместо описания списков значений, плюс скорость доступа выигрывает. У меня так эти 2Dim массивы почти в каждом приложении, работающим с ПЛК по сети.

Добавлено через 3 минуты
Вот для 3D-массивов пока не находил применения на практике. Это факт.
0
Модератор
Эксперт .NET
15806 / 10961 / 2845
Регистрация: 21.04.2018
Сообщений: 32,164
Записей в блоге: 2
18.09.2022, 20:05 8
Цитата Сообщение от wizard41 Посмотреть сообщение
Если, например, приложения работают с некими внешними ВС
Что такое BC ? Не понял.

И я не писал что многомерные матрицы не используются.
Они используются, но крайне редко, для каких-то специфических задач.
Одной из таких задач являются различные API и не .Net библы.
Но в целом в Шарпе стоит избегать многомерных массивов по многим причинам.
Одна из основных, что очень часто их использование нарушает ООП и SOLID.
А если вам (условно) не нужно ООП, то практически со 100% вероятностью вам не нужен и Шарп.

Цитата Сообщение от wizard41 Посмотреть сообщение
плюс скорость доступа выигрывает.
Ну, скорость - это, вообще, не к Шарпу.
Шарп решает совсем иную задачу в программировании.
Думаю, вы сами это прекрасно знаете.

Цитата Сообщение от wizard41 Посмотреть сообщение
У меня так эти 2Dim массивы почти в каждом приложении, работающим с ПЛК по сети.
Если этого требует API, оборудование - то что поделаешь.
Если же это ваша личная практика решения задач, то это плохая практика.
БЛ работает с нормальными сущностями.
Если Сущность нужно передать по сетке и для оптимизации трафика её нужно конвертировать в матрицу, то такое допустимо. Фактически подобное - это требование оборудования. И выделятся в отдельный слой по типу репозитория для БД.

Добавлено через 3 минуты
wizard41, опять же я не пишу TC'у, что многомерные матрицы нельзя ни в коем случае использовать.
Я просто предполагаю, что возможно он неверно выбрал способ решения задачи, и чтобы прояснил своё задание в целом.
Возможно есть более оптимальный способ его решения.
Тем более в свете необходимости создания универсальных методов работы для массивов любой размерности.
Как-то уж очень нереально такое требование звучит.
0
Эксперт по электронике
3076 / 2149 / 548
Регистрация: 04.09.2018
Сообщений: 7,383
Записей в блоге: 4
18.09.2022, 20:21 9
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Что такое BC ? Не понял.
Вычислительные Системы
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Одна из основных, что очень часто их использование нарушает ООП и SOLID.
Не нахожу связи. Можете привести примеры таких нарушений?
Чем, например, переменная int[,] отличается от просто int в свете шаблона проектирования SOLID приложения?
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Если же это ваша личная практика решения задач, то это плохая практика.
Не согласен. Проводились многократные тесты по скорости извлечения тех или иных данных из структур разного типа. 2-мерные массивы выиграли во всех случаях.
Ну и потом, представление и работа с ним легче в плане писанины кол-ва строк кода. Допустим, таблица масштабирования некоторого значения (ломанная) выгоднее представляется именно в 2-м массиве.
Цитата Сообщение от Элд Хасп Посмотреть сообщение
для оптимизации трафика её нужно конвертировать в матрицу
Не нужно. Речь идет не о передаче массива по сети, а о представлении и извлечении хранимых значений внутри приложения.

Элд Хасп, я понимаю, что вы не можете охватить все возможные сферы, где Шарп сожительствует рядом с другим оборудованием, поэтому сложно приводить конкретные примеры для сравнения.

Добавлено через 2 минуты
На счет ТС'а - уж очень специфичное задание. Я на 99,9% считаю, что его требования можно выполнить более "гуманными" способами, конечно. А не садить козу волка и зайца в одну лодку.
0
Модератор
Эксперт .NET
15806 / 10961 / 2845
Регистрация: 21.04.2018
Сообщений: 32,164
Записей в блоге: 2
18.09.2022, 21:16 10
Цитата Сообщение от wizard41 Посмотреть сообщение
Можете привести примеры таких нарушений?
Например, хранить данные не в коллекции сущностей, а в в матрице, где каждая колонка отвечает за свойство сущности.

Цитата Сообщение от wizard41 Посмотреть сообщение
Вычислительные Системы
Ну, я об этом написал, что в математике такое встречается: графика, трансформация, СЛАУ и т.д. и т.п.
Где в науке может используются и массивы с большим количеством измерений.
Вполне, возможно, что моделирование струнной теории требует 10-11 мерных массивов.

Цитата Сообщение от wizard41 Посмотреть сообщение
Шарп сожительствует рядом с другим оборудованием
Тоже об этом писал.

Цитата Сообщение от wizard41 Посмотреть сообщение
2-мерные массивы выиграли во всех случаях.
И что?
Если нужна оптимизация по скорости обработки информации, как в вычислительных системах, то с большой вероятностью лучше использовать другой ЯП. В большинстве таких задач даже старый, проверенный Фортран даст фору Шарпу.
Если же массивы нужны не для БЛ, то переход в Шарпе только из-за ускорения на них вряд ли будет оправдан. В целом для работы всего приложения это даст минимальное ускорение.

Опять таки, я не имею ввиду задачи, где многомерные массивы это естественное решение для БЛ требуемого задания.
Например, часто матрицы используются в БЛ аркадных игр для представления поля игры.

Поэтому и вопрос к ТС, чтобы он рассказал подробнее о своём задании.
Когда расскажет подробнее, то можно будет делать выводы о том действительно ли нужны для его реализации многомерные массивы.
Но, судя по его ответу что-то типа BinTree - массивы там "ни к селу, ни к городу".
0
Эксперт по электронике
3076 / 2149 / 548
Регистрация: 04.09.2018
Сообщений: 7,383
Записей в блоге: 4
18.09.2022, 21:20 11
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Например, хранить данные не в коллекции сущностей, а в в матрице, где каждая колонка отвечает за свойство сущности.
Жесть. И кто-то так делает реально?
0
Модератор
Эксперт .NET
15806 / 10961 / 2845
Регистрация: 21.04.2018
Сообщений: 32,164
Записей в блоге: 2
19.09.2022, 07:36 12
Цитата Сообщение от wizard41 Посмотреть сообщение
Жесть. И кто-то так делает реально?
У начинающих подобное встречается.
0
19.09.2022, 07:36
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.09.2022, 07:36
Помогаю со студенческими работами здесь

ОДНОМЕРНЫЙ И ДВУМЕРНЫЙ МАССИВЫ
ПОМОГИТЕ В РЕШЕНИИ ЗАДАЧ НА ОДНОМЕРНЫЙ И ДВУМЕРНЫЙ МАССИВЫ. ЗАРАНЕЕ БЛАГОДАРЕН "Одномерный...

одномерный/двумерный массивы.
Помогите решить задачи с массивами (одномерными/двумерными), завтра экзамен, а я так и не...

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

одномерный и двумерный массивы
1.Последовательность действительных чисел оканчивается нулем.Найти кол-во членов этой...

Одномерный и Двумерный Массивы
Помогите пожалуйста решить пару задач ) 1.Найти количество элементов массива B(16), кратных 4 и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru