|
0 / 0 / 0
Регистрация: 17.10.2011
Сообщений: 7
|
|||||||||||||||||||||
Как изменить значение по ссылке?17.11.2011, 19:08. Показов 3356. Ответов 4
Метки нет (Все метки)
Здравствуйте!
Постараюсь наиболее понятно изложить суть проблемы, хоть сделать это и не просто... Необходимо добиться функциональности ссылок на объекты по аналогии с C++ где мы могли создать указатель на объект, затем функцию, которая будет возвращать указатель на объект и с помощью этого указателя воздействовать на объект. Что имеется... Имеется некий экземпляр класса GPTreeNode у этого объекта имеется массив состоящий из двух объектов класса GPTreeNode и так далее. (кто догадался, таким образом моделируется бинарное дерево) Цель функций: У каждого экземпляра GPTreeNode есть порядковый номер. По этому номеру необходимо найти этот самый объект в первом дереве, затем найти по другому номеру другой объект в дереве и обменять их местами. Вся проблема в том, что по задумке, функция Find_Element должна возвращать ссылку не на какой-то объект, а именно на объект в массиве под определенным номером, затем это значение передается в функцию скрещивания (C1SwapC2) и эта функция должна присваивать ссылке result какое-то значение (какое опр-ся снова функцией Fine_Element) тем самым изменяя значение в базовом массиве. Вот и всё... Простите, что много букв, постарался как можно яснее всё изложить. всё начинается отсюда:
private List<IChromosome> population = new List<IChromosome>( ); затем функция First_Crossover
0
|
|||||||||||||||||||||
| 17.11.2011, 19:08 | |
|
Ответы с готовыми решениями:
4
Как в ссылке созданной странице изменить ?do= на name.html? Как на функцию клика по ссылке изменить параметры загрузки страницы?
|
|
155 / 155 / 30
Регистрация: 19.10.2009
Сообщений: 319
|
|
| 17.11.2011, 19:20 | |
|
Мне кажется, Вам следует получше разобраться с принципами программирования в .Net и отличиями от C++ - здесь не требуется явного описания ссылок и есть дополнительные возможности. Предлагаю для этого посмотреть существующий пример двоичного дерева.
0
|
|
|
0 / 0 / 0
Регистрация: 17.10.2011
Сообщений: 7
|
|
| 17.11.2011, 21:08 [ТС] | |
|
Спасибо! Открыл, пролистал, ещё внимательнее погляжу. О каких именно принципах вы говорите? Я, мм.. не мало чего прочитать успел за пару месяцев, что изучаю C#, мне казалось я чего-то не понимаю в правилах работы с ссылочными типами и типами значения, но почитав главу в книге ещё раз прикинул, что тут это никак не прикрутить.
Обычно всех кто заикается про ссылки отправляют читать про делегаты, но тут они мне помоему тоже не помогут. Подскажите пожалуйста что вы имели ввиду? Добавлено через 1 час 7 минут Можно добавить функцию, которая бы заново пробегала по всему дереву и искала элемент с нужным номером, а затем заменяла его, но это мне кажется не самый грамотный подход. Использовать в коде указатели тоже не желательно. Вряд ли у меня хватит знаний и опыта, что бы в случае чего отлаживать этот код. Что ещё тут можно предложить.. Даже не знаю. У меня был вариант где я сразу в функции аналогичной "Find_Element" вызывал функцию "C1SpawC2", нооо это ведёт к избыточности. Приходится добавлять ещё одну функцию "Find_Another_Element" что бы искать элемент во втором дереве, но это бред какой-то... Помогите пожалуйста словом добрым DДобавлено через 33 минуты Пока думал и разбирал код бинарного дерева по ссылке выше, появилась мысль написать свой итератор, но не будет ли это одно и то же, что написать метод, который будет пробегать по дереву и делать что-то с ним? Разве что итератор будет более универсален. Или я не прав?
0
|
|
|
155 / 155 / 30
Регистрация: 19.10.2009
Сообщений: 319
|
|
| 18.11.2011, 19:07 | |
|
Меня немного озадачили использование метода Clone, действие Swap и т. п.. Может я не вник в суть, но в примере по ссылке это нигде не используется. Зато для поиска реализуется, например, интерфейс IEnumerable и делается yield return. Ибо LINQ в подавляющем большинстве случаев позволяет получить наибольшую производительность для .Net. Может, в том примере по ссылке что-то просто не делается, но на мой взгляд, там присутствует грамотное использование C# (кстати, я находил и другие примеры, где сделано хуже).
1
|
|
|
0 / 0 / 0
Регистрация: 17.10.2011
Сообщений: 7
|
|
| 18.11.2011, 21:33 [ТС] | |
|
Спасибо! Посмотрел ту реализацию дерева, действительно интересная, нооо да, там нет того, что мне нужно было + переписывать почти готовую программу с использованием того дерева (потому что то, что мне досталось не очень удобно) и дописывать доп. функциональность это нечто страшное.. Не знаю кто бы стал это делать)))
Метод Clone здесь используется для того, что бы создать копию объекта, а не передать ссылку на уж имеющийся объект. Это алгоритм Генетического Программирования. Есть один объект, есть второй. Их нужно скрестить и получить 2 потомка. Для этого естественно создаются копии родителей и применяется скрещивание (т.е. они обмениваются какими-то частями) и получается уже четыре объекта. (про Swap позже) Поразмыслив, я понял, что написать итератор для всего этого пока для меня не представляется возможным. Да и само значение объектов мне не нужно, я и так могу его получить... =\ Сделал топорно. Есть метод Find_Element. Он ищет элемент в дереве с соответствующим номером и возвращает его. Далее есть метод Swap ему передается то, что вернул Find_Element. В методе Swap с помощью того же метода Find_Element, но уже во втором дереве ищется элемент с соответствующим номером (уже другим, случайным) и возвращается. Затем всё в том же методе Swap вызывается метод Set_Found_Element, который по реализации аналогичен Find_Element, только он найдя нужный элемент не возвращает его, а присваивает ему переданный элемент. Затем Swap возвращает найденный во втором дереве элемент (который мы заменили) и вызывается вновь метод Set_Found_Element но уже для первого дерева и соответственно найденному в первом вызове Find_Element элементу присваивается то, что вернул метод Swap. Таким образом достигается обмен некоторыми частями двух деревьев. Вот собственно и всё... Это если кто-то читать это будет и заинтересуется, могу отправить код. Спасибо за то, что вникли!
0
|
|
| 18.11.2011, 21:33 | |
|
Помогаю со студенческими работами здесь
5
Как правильно добавить значение переменной к ссылке?
как переделать функцию в классе, чтоб значение передавалось по ссылке
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога
Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
|
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование
. \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json>
Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом.
# Check if. . .
|
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так:
https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347
Основана на STM32F303RBT6.
На борту пять. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|