Member 11699415 Ответов: 3

Как получить данные на основе комбинаций значений в C#


Привет

Мне нужно получить значения, основанные на комбинации двух значений, которые я не хочу использовать, если еще statment или switch case, пожалуйста, посоветуйте, так как я очень новичок в этом.

Пример формата данных приведен ниже

Combinations                         result
   0  1                       -->      x
   0  2                       -->      y
   0  3                       -->      z
   1  0                       -->      a
   2  3                       -->      d


Спасибо

Что я уже пробовал:

я пробовал switch case и использовал else if и if condition эти условия делают код огромным, так как у меня есть большое количество комбинаций и код нечитаем.

Richard MacCutchan

Ваш вопрос неясен; как именно вы используете эти ценности и какие решения вам нужно принять?

njammy

Где хранятся эти значения? текстовый файл? база данных? константы?

3 Ответов

Рейтинг:
23

CPallini

Чтобы сопоставить два целых числа в символ, вы можете использовать Dictionary имея пару (двумерную Tuple) целых чисел в качестве ключа.


Рейтинг:
17

OriginalGriff

Здесь есть пара проблем: главная из них заключается в том, что мы понятия не имеем, каким может быть диапазон значений в ваших "комбинациях", поэтому мы понятия не имеем, какое решение предложить. Кроме того, мы не знаем точно, каков результат: являются ли эти имена переменными? Ценности? Струны? Мы понятия не имеем.
Но я подозреваю, что вы пытаетесь избежать вложенности ваших операторов switch, поскольку они затрудняют код.
Таким образом, одним из решений может быть:

int comb1 = 1;
int comb2 = 0;
long combination = ((long)comb1) << 32 | comb2;
switch (combination)
    {
    case 0L << 32 | 1: result = x; break;
    case 0L << 32 | 2: result = y; break;
    case 0L << 32 | 3: result = z; break;
    case 1L << 32 | 0: result = a; break;
    case 2L << 32 | 3: result = d; break;
    default:
        // ...
        break;
    }
Что устраняет вложенность и сокращает код до управляемых пропорций.


Member 11699415

да это целочисленные значения и поссбильные значения

пример для 0 существует n комбинаций
0,1
0,2
0,3
..... 0,15

у меня есть всего 4 комбинации
От 0,0 до 0,15
От 1,0 до 1,15
От 2,0 до 2,15
От 3,0 до 3,15
4,0-4,15

OriginalGriff

И каковы же результаты? Переменные или фиксированные значения?

Patrice T

Воспользуйся Улучшить вопрос чтобы обновить ваш вопрос.
Чтобы каждый мог обратить внимание на эту информацию.

Member 11699415

фиксированное значение, полученное из перечислений

OriginalGriff

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

MyEnum result = mappingTable[comb1, comb2];

Настройка таблицы сопоставления-это боль, но вы можете сделать это либо в коде:

частный статический MyEnum[5, 16] = {{MyEnum. x, MyEnum. y, ...

Или загрузить значения из таблицы во внешний файл.

Рейтинг:
11

Patrice T

Цитата:
у меня есть для 4, всего комбинаций
От 0,0 до 0,15
От 1,0 до 1,15
От 2,0 до 2,15
От 3,0 до 3,15
4,0-4,15
Как сказал OriginalGriff, проще всего сделать это двумерным массивом констант.
После этого в коде остается только прочитать массив.
Попробуйте что-нибудь вроде:
int Table[][]={{ 0, 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},
               ...};

и читать
MyVar= Table[0,15];


Philippe Mori

Когда-нибудь это может иметь смысл сделать, но в таком случае гораздо проще написать функцию, которая умножает одно из чисел на степень 2 так, чтобы биты не перекрывались, как: x' = 16 * x1 + x2 где x1 - число от 0 до 4 включительно, а x2-число от 0 до 15 включительно.

Patrice T

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