4 / 3 / 1
Регистрация: 30.11.2021
Сообщений: 101
|
|||||||||||
1 | |||||||||||
Сохранение соразмерности массивов, лежащих внутри разных полей одного класса27.10.2024, 20:09. Показов 655. Ответов 16
Есть допустим следующие типы, внутри которых имеются массивы:
Из-за этого чтобы добавить скажем дополнительную chamber в экземпляр ControlValve пришлось написать целое
0
|
27.10.2024, 20:09 | |
Ответы с готовыми решениями:
16
Есть два класса, изменения внутри полей одного должны менять поля другого Вызов метода одного класса внутри другого класса Поле одного класса внутри другого класса Посчитать сумму полей price у элементов разных массивов |
2337 / 1825 / 753
Регистрация: 27.07.2012
Сообщений: 5,400
|
|
27.10.2024, 21:02 | 2 |
Ну для начала зачем мешать в кучу списки и массивы? Почему maxtrix, absolute и heavyside не могут тоже быть списками? У них хотя бы есть метод вставки List.Insert в любое место со всеми проверками.
Но вообще надо просто всю структуру пересмотреть. Я не знаю, что за задачу вы решаете, но почему эти matrix надо постоянно заполнять, а не вычислить по имеющимся chambers и electroLines в тот момент, когда они понадобятся? Сейчас же вы пытаетесь связать несвязуемое.
1
|
28.10.2024, 01:51 | 3 |
Согласен. Еще и какая-то тупая логика в приведенном коде класса TransCondition. Создать массив на основании другого и его же переписать.. Ну, это как разбирать двигатель через... глушитель.
0
|
4 / 3 / 1
Регистрация: 30.11.2021
Сообщений: 101
|
|
28.10.2024, 09:27 [ТС] | 4 |
Листы делал для сущностей, матрицы для взаимосвязей.
Если касательно задачи: Есть n чамберов со сжатым воздухом и есть m правил по которым между чамберами i и j открывается переток k. правила могут зависеть от ряда давлений p0, p1, p2... из n, а также от ряда напряжений q0, q1, q2... из e (которое я еще не вводил, но думаю тут уже никто читать не будет). Короче видимо раздвигаю и вставляю я неправильно. Надо буду да почитаю работу с массивами опять.
0
|
3683 / 2594 / 719
Регистрация: 02.08.2011
Сообщений: 6,963
|
|
28.10.2024, 10:58 | 5 |
0
|
4 / 3 / 1
Регистрация: 30.11.2021
Сообщений: 101
|
|
28.10.2024, 11:00 [ТС] | 6 |
Тк, а какое, обобщенно, замечание по поводу моей структуры данных и принципов ООП здесь?
Слишком расплывчатый ответ просто: "проверьте вашу структуру данных, она плоха"...
0
|
3683 / 2594 / 719
Регистрация: 02.08.2011
Сообщений: 6,963
|
|
28.10.2024, 11:11 | 7 |
Да пока непонятна ваша задумка, но сам факт, что подобная проблема возникает, уже говорит о том что что-то не так.
Явно можно сделать проще.
1
|
4 / 3 / 1
Регистрация: 30.11.2021
Сообщений: 101
|
|
28.10.2024, 11:29 [ТС] | 8 |
Задумка тут в том, что есть воздухораспределитель.
Есть входящие параметры: ряд давлений и ряд напряжений. Есть выходные параметры: ряд давлений вых. А внутренность класса ControlValve должна обеспечить чтобы когда по таймеру на вход накидываются входные параметры, на выходе были отынтегрированные соответствующие выходные. Внутри сама по себе штука непростая. На сей момент из ваших ответов я составил резюме: "Если у тебя возник такой вопрос -- вероятно пересмотри код, породивший необходимость этих операций, возможно проблема впринципе отпадет. И в массивы ты как-то неправильно вставляешь".
0
|
2105 / 1515 / 392
Регистрация: 26.06.2017
Сообщений: 4,350
|
|
28.10.2024, 11:46 | 9 |
Ну как минимум можно использовать Array.Resize<T>, тогда часть итераций, а именно
chamberIndex - 1 , будут не нужны. Кроме этого сэкономите на создании ещё одного массива.И соглашусь с участниками темы, что вы в одну кучу сваливаете и сущности чамберов и какие-то операции с ними. Почему бы их не разделить? Чтобы добавление чамбера выглядело в коде естественно, т.е. с применением метода Add или Insert, то я бы применил в классе ControlValve собственные коллекции вместо List. Эти коллекции должны определять/переопределять методы вставки так, чтобы при этом можно было изменять размер связанных массивов автоматически.
1
|
4 / 3 / 1
Регистрация: 30.11.2021
Сообщений: 101
|
||||||
28.10.2024, 15:06 [ТС] | 10 | |||||
Да, пожалуй есть прблема вот в этом:
То же самое ссылка на условие открытия и условие закрытия канала. Оттуда этот рак и стал распространяться по всему классу. По идее нужно эти инты замменить на соответствующие классы, у меня периодически бывает отъезд мышления в сторону "класс в сишарп -- НЕ ссылочный объект", а если исходить из такого, то да, фигня происходит. Пойду словарями позаменяю всё...
0
|
4 / 3 / 1
Регистрация: 30.11.2021
Сообщений: 101
|
|
28.10.2024, 16:15 [ТС] | 12 |
Ну всё словарями это гипербола конешно. Просто еще при первом составлении кода как минимум один словарь у меня появился там. Входные параметры которые. Они же выходные для некоторого другого объекта суть.
И вот задача как их в соответствие составить. Их может быть один, два, четыре может быть. И какой-то экземпляр ControlValve управляется только одним параметром, а какой-то двумя. В Индии большинство двумя например... Короче когда на выходе управляющего объекта есть List<Штука>, пришедший на вход моего ControlValve -- как этому ControlValve определить -- какой из членов коллекции к чему относится? В реальной жизни определяют по именам/цветам, ну то есть тормоза подключают к тормозной магистрали, а питание пневматическое к питающей... И тут уже дальше можно думать только о коде, не о структуре данных. Если Лист -- то нужно убедиться что в Листе всегда одинаковые индексы у одноименных сигналов. Если Словарь -- то нужно убедиться, что тормозная магистраль всегда называется "ТМ", а напорная "НМ"... В любом случае нужна какая-то преддоговоренность о формате, вопрос что удобнее для кода -- Дикшнри или Лист? (Дополнительно нужно не забыть про случай, когда количество выходов управляющего объекта больше, чем количество входов данного. И обратную ситуацию поиметь ввиду, хотя мне на ум из реалайф приходят только вырожденные случаи)
0
|
4 / 3 / 1
Регистрация: 30.11.2021
Сообщений: 101
|
||||||
28.10.2024, 20:51 [ТС] | 14 | |||||
Избавится от тех матриц придумал только так:
0
|
2105 / 1515 / 392
Регистрация: 26.06.2017
Сообщений: 4,350
|
|
28.10.2024, 21:13 | 15 |
А-а-а, понял в чём у вас дилемма. Это же про паровозы из соседней ветки! Ну так и с пневмой также, как там: есть базовый класс пневмы, а дальше пошло-поехало класс для тормозов, класс для питающей ветви, класс для подкачки ЖД-колёс
1
|
4 / 3 / 1
Регистрация: 30.11.2021
Сообщений: 101
|
|
28.10.2024, 21:39 [ТС] | 16 |
Таки интерфейс, как бы намекающий, что вот эти вот колёсики:железяки, Iскладываемое можно сложить с вот теми проводочками:кабеляки,Iскладываемое, а вон те колёсищи:железяки -- нельзя.
Не так просто мне оказалось это сформулировать.
0
|
28.10.2024, 21:50 | 17 |
0
|
28.10.2024, 21:50 | |
28.10.2024, 21:50 | |
Помогаю со студенческими работами здесь
17
Сохранение всех полей класса в файл Реализовать сохранение в базу данных полей разных типов (в том числе и пользовательских) Вывод значений полей класса в разных формах Массив разных объектов внутри класса Вывод одного ответа из разных значений и сохранение их в строке Привязка одного из полей класса к TextBox Использование массивов внутри методов класса Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |