Как оптимизировать и сделать это более читабельным - PullRequest
0 голосов
/ 18 октября 2019

Привет всем У меня есть вопрос о том, как сделать это более чистым, многоразовым и читабельным. У меня есть некоторые модели данных (реликвии), и это имеет редкость и уровень. В зависимости от уровня и редкости он должен быть сгруппирован, чтобы позже применить это в некоторых математических вычислениях. По этой причине мне нужно проанализировать все мои реликвии, проверить уровень и редкость и сохранить их в счетчике варов.


public double TotalGlobalBonus
{
    get
    {
        float commonRarityMultiplier = 20;
        float rareRarityMultiplier = 120;
        float epicRarityMultiplier = 320;
        float legendaryRarityMultiplier = 540;

        int rarityCommonLevel1 = 0;
        int rarityCommonLevel2 = 0;
        int rarityCommonLevel3 = 0;
        int rarityCommonLevel4 = 0;
        int rarityCommonLevel5 = 0;

        int rarityRareLevel1 = 0;
        int rarityRareLevel2 = 0;
        int rarityRareLevel3 = 0;
        int rarityRareLevel4 = 0;
        int rarityRareLevel5 = 0;

        int rarityEpicLevel1 = 0;
        int rarityEpicLevel2 = 0;
        int rarityEpicLevel3 = 0;
        int rarityEpicLevel4 = 0;
        int rarityEpicLevel5 = 0;

        int rarityLegendaryLevel1 = 0;
        int rarityLegendaryLevel2 = 0;
        int rarityLegendaryLevel3 = 0;
        int rarityLegendaryLevel4 = 0;
        int rarityLegendaryLevel5 = 0;

        foreach (RelicModel relic in this.equipedRelics)
        {
            switch (relic.rarity)
            {
                case RarityType.COMMON:
                    switch (relic.Level)
                    {
                        case 1:
                            rarityCommonLevel1++;
                            break;
                        case 2:
                            rarityCommonLevel2++;
                            break;
                        case 3:
                            rarityCommonLevel3++;
                            break;
                        case 4:
                            rarityCommonLevel4++;
                            break;
                        case 5:
                            rarityCommonLevel5++;
                            break;
                    }
                    break;
                case RarityType.RARE:
                    switch (relic.Level)
                    {
                        case 1:
                            rarityRareLevel1++;
                            break;
                        case 2:
                            rarityRareLevel2++;
                            break;
                        case 3:
                            rarityRareLevel3++;
                            break;
                        case 4:
                            rarityRareLevel4++;
                            break;
                        case 5:
                            rarityRareLevel5++;
                            break;
                    }
                    break;
                case RarityType.EPIC:
                    switch (relic.Level)
                    {
                        case 1:
                            rarityEpicLevel1++;
                            break;
                        case 2:
                            rarityEpicLevel2++;
                            break;
                        case 3:
                            rarityEpicLevel3++;
                            break;
                        case 4:
                            rarityEpicLevel4++;
                            break;
                        case 5:
                            rarityEpicLevel5++;
                            break;
                    }
                    break;
                case RarityType.LEGENDARY:
                {
                    switch (relic.Level)
                    {
                        case 1:
                            rarityLegendaryLevel1++;
                            break;
                        case 2:
                            rarityLegendaryLevel2++;
                            break;
                        case 3:
                            rarityLegendaryLevel3++;
                            break;
                        case 4:
                            rarityLegendaryLevel4++;
                            break;
                        case 5:
                            rarityLegendaryLevel5++;
                            break;
                    }
                    break;
                }
            }
        }

        double common = (commonRarityMultiplier / 100) * (rarityCommonLevel1 * 1 + rarityCommonLevel2 * 5 +
                                                          rarityCommonLevel3 * 10 + rarityCommonLevel4 * 20 +
                                                          rarityCommonLevel5 * 40);
        double rare = (rareRarityMultiplier / 100) * (rarityRareLevel1 * 1 + rarityRareLevel2 * 5 +
                                                        rarityRareLevel3 * 10 + rarityRareLevel4 * 20 +
                                                        rarityRareLevel5 * 40);
        double epic = (epicRarityMultiplier / 100) * (rarityEpicLevel1 * 1 + rarityEpicLevel2 * 5 +
                                                      rarityEpicLevel3 * 10 + rarityEpicLevel4 * 20 +
                                                      rarityEpicLevel5 * 40);
        double legendary = (legendaryRarityMultiplier / 100) * (rarityLegendaryLevel1 * 1 + rarityLegendaryLevel2 * 5 +
                                                                rarityLegendaryLevel3 * 10 + rarityLegendaryLevel4 * 20 +
                                                                rarityLegendaryLevel5 * 40);

        double final = common + rare + epic + legendary;

        return final;
    }
}


Это свойство действительно долгое и будет расти, если количество уровней будет расти,так что это не точно масштабируется

1 Ответ

4 голосов
/ 18 октября 2019

Вам необходимо поместить все эти значения в Dictionary с ключами типа RarityType и значениями типа int[].

var rarity = new Dictionary<RarityType, int[]>();
rarity[RarityType.COMMON] = new int[6];
rarity[RarityType.RARE] = new int[6];
rarity[RarityType.EPIC] = new int[6];
rarity[RarityType.LEGENDARY] = new int[6];

foreach (RelicModel relic in this.equipedRelics)
{
    rarity[relic.rarity][relic.Level]++;
}

Первый элемент каждогомассив с индексом = 0 предназначен для неиспользования.

...