Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 04.02.2012
Сообщений: 14

Сильно раздутый switch case

25.01.2013, 13:06. Показов 1481. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Ломаю голову над одной простой задачей. Как красивее и производительнее закодировать тип данных. Есть БД на sql server. В ней несколько таблиц. Таблица1 состоит из "Столбец1, smallint", "Столбец2, nvarchar(10)", "Столбец3, nvarchar(10)", "Столбец4, nvarchar(20)", "Столбец5, nvarchar(3)", "Столбец6, nvarchar(3)", "Столбец7, int", "Столбец8, tinyint". Столбец1 должен содержать закодированное мной уникальное значение для каждого из вариантов значений остальных столбцов. Всего получается порядка 500 строк. В Таблице2 будут находиться текстовые данные и соответствующий им тип из Стоблца 1, Таблицы 1 как внешний ключ.
Программа работает с БД следующим образом. Получает текстовый файл от другой программы -> Парсит из текста информацию соответствующую Таблице1 -> Определяет тип данных (вот здесь и думаю как реализовать) -> Вставляет текстовый файл в Таблицу2.
Вижу 2 варианта:
1. Перебрать все возможные варианты через switch case:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
switch (data1)
            {
                case "тип1":
                    switch (data2)
                    {
                        case "тип1.тип1":
                            switch (data3)
                            {
                                case "тип1.тип1.тип1.":
                                    switch...
.....Добираюсь до последнего столбца.. 
Перечисляя каждый вариант который может там быть инициализирую переменную соответствующую Таблица1-Столбец1..
                             }
                    }
            }
Если так делать то будет дофига строк кода... Как то не красиво получается. Таблица1 получается здесь не используется, она нужна только для наглядности и связи с другими таблицами.
2. Закодировать все варианты в Таблица1 в sql server и запрашивать через SELECT во время определения типа данных. Получается будет лишняя нагрузка на БД запросами т.к. данные будут приходить часто и в большом количестве. Лишних запросов будет много.
Как лучше сделать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.01.2013, 13:06
Ответы с готовыми решениями:

Switch case 'Ш'
Всем доброго дня! Как сделать case для русского введённого с клавиатуры символа?

SWITCH-CASE

Сильно ли нагружает switch
Доброго времени суток, хотел спросить, если свитч это то же что и if - else Взял от сюда Еще там прописано что: Зная математику,...

12
24 / 24 / 11
Регистрация: 28.12.2010
Сообщений: 142
27.01.2013, 08:53
Сложно представить....

Попробуйте использовать Dictionary - словарь.

Ключом является название типа, а значением - сам тип.

C#
1
new Dictioanary<String, Type>()
1
0 / 0 / 0
Регистрация: 04.02.2012
Сообщений: 14
28.01.2013, 20:18  [ТС]
Походу я слишком непонятно написал... Попробую проще.
Допустим есть обьект: строка. Она может быть примерно такого содержания: "У Васи Голубые глаза, кудрявые волосы и низкий голос". Из этой строки я беру данные: Цвет глаза - голубые, Тембр голоса - высокий, Волосы - Кудрявые. Соответственно будет таблица с тремя колонками. И я хочу закодировать все варианты в этой таблице.
Что-то вроде этого (пример надумал только что):
0 Голубой - Высокий - Кудрявые
1 Голубой - Высокий - Короткие прямые
......
205 Оранжевый - Маленький - Лысый
Вот а как реализовать еще думаю.
Думаю вот через битовые операции. Глазам отвести младшие 3 разряда, Рост - следующие 2 разряда, Волосы - следующие 2-3 разряда. Потом это все просуммировать и получим АйДи...
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
29.01.2013, 14:22
maxgold, тут лучше предусмотреть какую-нибудь другую систему кодирования. Например, что бы каждый разряд кода отвечал за свою характеристику (1 - цвет волос, 2 цвет глаз и т.д.)
0
0 / 0 / 0
Регистрация: 04.02.2012
Сообщений: 14
29.01.2013, 17:44  [ТС]
А чем мой вариант отличается? Не понял... Одним разрядом не обойтись, для каждой характеристики будет 4-9 вариантов значений.
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
29.01.2013, 20:40
Цитата Сообщение от maxgold Посмотреть сообщение
Одним разрядом не обойтись, для каждой характеристики будет 4-9 вариантов значений.
в один разряд входит 10 значений (для 10-чной системы), 16 (для 16-чной).
Цитата Сообщение от maxgold Посмотреть сообщение
А чем мой вариант отличается?
кодировать хуже
1
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
29.01.2013, 20:57
maxgold, у тебя всегда идут они в таком порядке? ТО есть "глаза голубые, волосы зеленые" а не "глаза голубые, зеленые руки", то есть последовательность всегда одна и та же?
0
0 / 0 / 0
Регистрация: 04.02.2012
Сообщений: 14
30.01.2013, 12:02  [ТС]
Цитата Сообщение от nio Посмотреть сообщение
в один разряд входит 10 значений (для 10-чной системы), 16 (для 16-чной).

кодировать хуже
Я двоичную систему имел в виду.
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
30.01.2013, 12:19
Цитата Сообщение от maxgold Посмотреть сообщение
Я двоичную систему имел в виду.
не усложняй себе задау
0
0 / 0 / 0
Регистрация: 04.02.2012
Сообщений: 14
30.01.2013, 12:29  [ТС]
Цитата Сообщение от Psilon Посмотреть сообщение
maxgold, у тебя всегда идут они в таком порядке? ТО есть "глаза голубые, волосы зеленые" а не "глаза голубые, зеленые руки", то есть последовательность всегда одна и та же?
Данные предваритеьно парсятся в обьект класса (или структуру даже лучше) такого вида:

C#
1
2
3
4
5
6
7
8
9
10
11
class DataInfo
        {
            public int id;
            public string str1;
            public string str2;
            public string str3;
            public string str4;
            public int i1;
            public int i2;
            public bool b;
        }
id - нужно как раз вычислить. Строки str1 - 10 значений, str2 - 5, str3 - 3, str4 - 4, i1 - 20, i2 - 6.
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
30.01.2013, 13:34
maxgold, смысл в том, что можно попросить регулярку распарсить, сохранив все в группы, потом эти группы нативно переносятся в структуру/класс нужной структуры (каламбур, хе)
0
0 / 0 / 0
Регистрация: 04.02.2012
Сообщений: 14
30.01.2013, 14:36  [ТС]
А как это делается? Можно пример?
0
Master of Orion
Эксперт .NET
 Аватар для Psilon
6102 / 4958 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
30.01.2013, 15:03
maxgold, посмотрите в книжке Нейгела про регулярки, там это описано. Книжку переписывать сюда долго будет. Там глава на 20 страничек, потратьте полчаса
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
30.01.2013, 15:03
Помогаю со студенческими работами здесь

Оператора switch / case
Локатор ориентирован на одну из сторон света ( «С» - север, «Ю» - юг, «З» - запад, «В» - восток) и может принимать три цифровые команды: 1...

Избавится от switch case
Всё задание в заголовке, видел способ как можно заменить свитч с помощью словаря и делегат, хочу узнать может есть еще какие-то способы?

Проблема со switch case
Есть такой код: switch(cmd) { case 777 : break; case 1: { MessageBox.Show(&quot;1&quot;); ...

Switch Case на байтах
byte str; foreach (byte b in str) { switch (b) { case &quot;???&quot;: ...

Оператор switch-case
Привет, друзья!) Такой вопрос: Можно ли создавать в глобальном switch-case несколько локальных switch-case в методе? Если да, то где...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru