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

Как правильно создать структуру?

02.07.2023, 18:36. Показов 638. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите как правильно создать структуру, мне нужно создать переменную с 6ю плавающими, к примеру в юнити есть такая Vector3 с тремя, а мне нужно с 6ю, делаю так
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public struct Vector6{
    public float x1, y1, z1, x2, y2, z2;
    public Vector6(float x1, float y1, float z1, float x2, float y2, float z2){
        this.x1 = x1;
        this.y1 = y1;
        this.z1 = z1;
        this.x2 = x2;
        this.y2 = y2;
        this.z2 = z2;
        }
    }
.....
Vector6 MyVar = new Vector6(1f, 0f, 1f, 0f, 0f, 1f);
Debug.Log(MyVar);
Но просматривая саму переменную мне выводит не её значение а Vector6.
Подскажите как правильно?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.07.2023, 18:36
Ответы с готовыми решениями:

Как правильно создать структуру?
Здравствуйте. Создал структуру, не могу понять, или ее не видно нигде, либо я не правильно что-то делаю, не могу записать в нее данные. ...

Как правильно создать структуру (struct)?
Всем добрый день, Мне нужно просто создать струкутру, в который будет 3 значения: ip, login, password. Далее я ее буду использовать,...

C# Подскажите как правильно передать указатель на структуру в функцию
Здравствуйте, возникли проблемы с переходом из С в С#, к сожалению синтаксис C# знаю плохо и сразу возник вопрос: Есть функция из...

17
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3419 / 2738 / 575
Регистрация: 04.09.2018
Сообщений: 8,607
Записей в блоге: 3
02.07.2023, 18:39
Цитата Сообщение от Nebiros Посмотреть сообщение
Подскажите как правильно?
Внутри структуры переопредели (override) метод ToString() в тот вид, в каком тебе нужно.
1
 Аватар для Nebiros
41 / 40 / 16
Регистрация: 23.03.2010
Сообщений: 3,122
02.07.2023, 18:42  [ТС]
Цитата Сообщение от wizard41 Посмотреть сообщение
Внутри структуры переопредели (override) метод ToString() в тот вид, в каком тебе нужно.
но мне не строка нужна, мне нужно потом получать эти переменные, например
C#
1
2
3
float x = MyVar.x1;
float y = MyVar.y2;
float z = MyVar.z2;
0
sleep
 Аватар для I can
4943 / 4625 / 843
Регистрация: 13.04.2015
Сообщений: 9,804
02.07.2023, 18:43
Цитата Сообщение от Nebiros Посмотреть сообщение
не её значение
А какое значение вы ожидаете?
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
02.07.2023, 18:44
Цитата Сообщение от Nebiros Посмотреть сообщение
как правильно создать структуру, мне нужно создать переменную с 6ю плавающими
Структура мутабельная или нет?
1
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3419 / 2738 / 575
Регистрация: 04.09.2018
Сообщений: 8,607
Записей в блоге: 3
02.07.2023, 18:45
Цитата Сообщение от Nebiros Посмотреть сообщение
но мне не строка нужна
Цитата Сообщение от Nebiros Посмотреть сообщение
мне выводит не её значение а Vector6.
ни че не понятно.
Цитата Сообщение от Nebiros Посмотреть сообщение
float x = MyVar.x1;
Ну вот, присваиваешь же... В чем проблема то?
1
 Аватар для Nebiros
41 / 40 / 16
Регистрация: 23.03.2010
Сообщений: 3,122
02.07.2023, 18:47  [ТС]
Цитата Сообщение от I can Посмотреть сообщение
А какое значение вы ожидаете?
мне должно вывести значение (1f, 0f, 1f, 0f, 0f, 1f), именно так выводит Vector3 (только там 3 флоата)

Добавлено через 1 минуту
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Структура мутабельная или нет?
честно первый раз слышу это определение "мутабельная", пороюсь в сети что по чём...
0
Эксперт JavaЭксперт по электроникеЭксперт .NET
 Аватар для wizard41
3419 / 2738 / 575
Регистрация: 04.09.2018
Сообщений: 8,607
Записей в блоге: 3
02.07.2023, 18:49
Цитата Сообщение от Nebiros Посмотреть сообщение
мне должно вывести значение (1f, 0f, 1f, 0f, 0f, 1f)
При чем здесь присвоение? Ты наверное спутал его с выводом.
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
02.07.2023, 18:50
Лучший ответ Сообщение было отмечено Nebiros как решение

Решение

Цитата Сообщение от Nebiros Посмотреть сообщение
честно первый раз слышу это определение "мутабельная"
После создания экземпляра поля структуры будут меняться?

В современном Шарпе обычно делают так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    public readonly struct Vector6
    {
        public float X1 { get; }
        public float Y1 { get; }
        public float Z1 { get; }
        public float X2 { get; }
        public float Y2 { get; }
        public float Z2 { get; }
        public Vector6(float x1, float y1, float z1, float x2, float y2, float z2)
        {
            X1 = x1;
            Y1 = y1;
            Z1 = z1;
            X2 = x2;
            Y2 = y2;
            Z2 = z2;
        }
 
        public override string ToString() => $"{{{X1}; {Y1}; {Z1}; {X2}; {Y2}; {Z2}; }}";
    }
1
 Аватар для Nebiros
41 / 40 / 16
Регистрация: 23.03.2010
Сообщений: 3,122
02.07.2023, 18:52  [ТС]
я делаю словарь где ключ вот эта Vector6, я её задаю как показывал выше, но она не задаётся как переменная, то есть если сделать так
C#
1
2
3
4
5
6
Dictionary<Vector6, DataSegmentCache> MyDic = new Dictionary<Vector6, DataSegmentCache>();
Vector6 MyVar = new Vector6(1f, 0f, 1f, 0f, 0f, 1f);
MyDic.Add(MyVar, new DataSegmentCache>());
...
Debug.Log(MyVar); // выведет Vector6
Debug.Log(MyDic[MyVar]); // даст ошибку что такого ключа нет...
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
02.07.2023, 19:00
Лучший ответ Сообщение было отмечено Nebiros как решение

Решение

Цитата Сообщение от Nebiros Посмотреть сообщение
первый раз слышу э
А про деконструктор слышали?
Если добавить:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
    public readonly struct Vector6
    {
        public float X1 { get; }
        public float Y1 { get; }
        public float Z1 { get; }
        public float X2 { get; }
        public float Y2 { get; }
        public float Z2 { get; }
        public Vector6(float x1, float y1, float z1, float x2, float y2, float z2)
        {
            X1 = x1;
            Y1 = y1;
            Z1 = z1;
            X2 = x2;
            Y2 = y2;
            Z2 = z2;
        }
 
        public override string ToString() => $"{{{X1}; {Y1}; {Z1}; {X2}; {Y2}; {Z2}; }}";
 
        public void Deconstruct(out float x1, out float y1, out float z1)
        {
            x1 = X1;
            y1 = Y1;
            z1 = Z1;
        }
 
        public void Deconstruct(out float x1, out float y1, out float z1, out float x2, out float y2, out float z2)
        {
            x1 = X1;
            y1 = Y1;
            z1 = Z1;
            x2 = X2;
            y2 = Y2;
            z2 = Z2;
        }
    }
ТО можно будет так:
C#
1
2
    (float x, float y, float z) = vector6;
    (float x1, float y1, float z1, float x2, float y2, float z2) = vector6;
1
 Аватар для Nebiros
41 / 40 / 16
Регистрация: 23.03.2010
Сообщений: 3,122
02.07.2023, 19:01  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Если добавить:
спасибо.
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
02.07.2023, 19:10
Цитата Сообщение от Nebiros Посмотреть сообщение
где ключ вот эта Vector6
Для ключа в структуре нужно реализовать сравнение и HashCode:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
    public readonly struct Vector6: IEquatable<Vector6>
    {
 
        public float X1 { get; }
        public float Y1 { get; }
        public float Z1 { get; }
        public float X2 { get; }
        public float Y2 { get; }
        public float Z2 { get; }
        public Vector6(float x1, float y1, float z1, float x2, float y2, float z2)
        {
            X1 = x1;
            Y1 = y1;
            Z1 = z1;
            X2 = x2;
            Y2 = y2;
            Z2 = z2;
        }
 
        public override string ToString() => $"{{{X1}; {Y1}; {Z1}; {X2}; {Y2}; {Z2}; }}";
 
        public void Deconstruct(out float x1, out float y1, out float z1)
        {
            x1 = X1;
            y1 = Y1;
            z1 = Z1;
        }
        public void Deconstruct(out float x1, out float y1, out float z1, out float x2, out float y2, out float z2)
        {
            x1 = X1;
            y1 = Y1;
            z1 = Z1;
            x2 = X2;
            y2 = Y2;
            z2 = Z2;
        }
 
        public override bool Equals(object? obj)
        {
            return obj is Vector6 vector &&
                   Equals(vector);
        }
 
        public override int GetHashCode()
        {
            return HashCode.Combine(X1, Y1, Z1, X2, Y2, Z2);
        }
 
        public bool Equals(Vector6 other)
        {
 
            return X1 == other.X1 &&
                   Y1 == other.Y1 &&
                   Z1 == other.Z1 &&
                   X2 == other.X2 &&
                   Y2 == other.Y2 &&
                   Z2 == other.Z2;
        }
 
        public static bool operator ==(Vector6 left, Vector6 right)
        {
            return left.Equals(right);
        }
 
        public static bool operator !=(Vector6 left, Vector6 right)
        {
            return !(left == right);
        }
    }
Добавлено через 2 минуты
Nebiros, здесь напрашивается не просто Vector, а вся трёхмерная иерархия: точка, отрезок, вектор и др.

Добавлено через 2 минуты
Тем более что у вектора по математике должна быть только одна координата. Нормализованный вектор всегда начинается в точке (0, 0, 0).
1
 Аватар для Nebiros
41 / 40 / 16
Регистрация: 23.03.2010
Сообщений: 3,122
02.07.2023, 19:18  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Nebiros, здесь напрашивается не просто Vector, а вся трёхмерная иерархия: точка, отрезок, вектор и др.
ну мне по моей задумке нужно проверять отрезки на проходимость, есть точка А и точка В, в словаре у меня есть (или добавляются записи если нет) данные о этих отрезках, для того чтобы их было легче искать я и делаю ключ отрезка, а там уже подставляю значения векторов, например достать данные отрезка А-В словарь[Vector3(A) + Vector3(B)]... данные
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
02.07.2023, 19:40
Цитата Сообщение от Nebiros Посмотреть сообщение
нужно проверять отрезки
То есть это отрезок, а не вектор.
Отрезок направленный или нет?

Добавлено через 1 минуту
Цитата Сообщение от Nebiros Посмотреть сообщение
есть точка А и точка В
Как я и думал, собственно.
Тогда лучше объявить сначала структуру Point3D. Потом уже Segment3D из двух Point3D.

Добавлено через 1 минуту
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Отрезок направленный или нет?
То есть отрезок A-B считается равным отрезку B-A или нет?
0
 Аватар для Nebiros
41 / 40 / 16
Регистрация: 23.03.2010
Сообщений: 3,122
02.07.2023, 20:01  [ТС]
Цитата Сообщение от Элд Хасп Посмотреть сообщение
То есть это отрезок, а не вектор....
Vector3 в юнити это может быть и координата конкретного объекта с 3D координатами x,y,z так может и указывать направление, например
точка по координатам (1, 0, 2) (объект) идёт вперед (0, 0, 1), значит отрезок будет начинаться в (1, 0, 1) и заканчиваться (1, 0, 3)
таким образом я в словаре с ключом [1, 0, 2, 1, 0, 3] задаю данные, например направление (0, 0, 1) ну и там остальные по типу какой там угол, проходимость и т.д.

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

в общем тестирую сейчас это всё...
0
Эксперт .NET
 Аватар для Wolfdp
3790 / 1767 / 371
Регистрация: 15.06.2012
Сообщений: 6,543
Записей в блоге: 3
03.07.2023, 06:42
Цитата Сообщение от Элд Хасп Посмотреть сообщение
Для ключа в структуре нужно реализовать сравнение и HashCode:
Вроде де же там через отражение автоматом реализуется сравнение? По крайне мере такой код работает
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
using System.Collections.Generic;
 
var nya = new Nya(1,2,3);
var dic = new Dictionary<Nya, int>();
dic.Add(nya, 1);
var result = dic[nya];
;
 
public struct Nya
{
    public double X { get; }
    public double Y { get; }
    public double Z { get; }
 
    public Nya(double x, double y, double z)
    { 
        X = x;
        Y = y;
        Z = z;
    }
}
И даже такой
C#
1
2
3
4
5
var nya = new Nya(1,2,3);
var dic = new Dictionary<Nya, int>();
dic.Add(nya, 1);
var nya1 = new Nya(1,2,3);
var result = dic[nya1];
Но вот насчет перфоманса есть сомнения.

Цитата Сообщение от Nebiros Посмотреть сообщение
Debug.Log(MyDic[MyVar]); // даст ошибку что такого ключа нет...
либо MyVar поменялся, либо дикшенари, либо таки вместо структуры сделали сылочный class.
1
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16140 / 11264 / 2888
Регистрация: 21.04.2018
Сообщений: 33,109
Записей в блоге: 2
03.07.2023, 13:59
Цитата Сообщение от Wolfdp Посмотреть сообщение
Вроде де же там через отражение автоматом реализуется сравнение?
Да. Есть такая дефолтная реализация.
Но с нюансами...
Рекомендуется заменять на кастомную.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
03.07.2023, 13:59
Помогаю со студенческими работами здесь

Как создать структуру (желательно с исходниками)
Доброго дня всем У кого нибудь есть исходник данной программы?? Заранее огромное спасибо 5.Создать структуру, описывающую сотрудника...

Как создать структуру, включающую массив переменных
Нужно создать структуру типа вот такой: public struct str { public string name; public int nomera =...

C# + DOM (как создать такую структуру программно)
Нужно создать такую структуру в C#. &lt;root&gt; &lt;node1 id=”1”&gt; &lt;node11&gt;11.11&lt;/node11&gt; &lt;node12&gt;12.12&lt;/node12&gt; ...

Как создать структуру разных типов с вложенными списками?
class a { class b { List&lt;T&gt; list=new List&lt;T&gt;; } class c { List&lt;T&gt; list=new...

Как правильно описать структуру БД?
Я делаю чат и мне понадобилась БД для списка пользователей. Там будут в частности администраторы и баны. Я использую Entity Framework и...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru