Как получить Sum () из List <> в зависимости от порядка массива string [] - PullRequest
0 голосов
/ 21 февраля 2019

Я пытаюсь получить Sum() из List<> в зависимости от string[] массива.Я попробовал следующий метод:

private static List<int> sum = new List<int>();
private static int total = 0;
private static string[] ErrorCode = new string[] {"@", "-2", "!"};

private static void Score(string[] ErrorCode)
{
        if (ErrorCode.Contains("@"))
        {
            sum.Add(1);
        }
        if (ErrorCode.Contains("-2"))
        {
            sum.Add(-2);
        }

        if (ErrorCode.Contains("!"))
        {
            sum.Clear();
            sum.Add(5);
        }

        total = sum.Sum(); 
        //This prints total = 5
}

Однако, если массив упорядочен по-другому, например:

private static string[] ErrorCode = new string[] {"!", "-2", "@"};

private static void Score(string[] ErrorCode)
{
        if (ErrorCode.Contains("@"))
        {
            sum.Add(1);
        }
        if (ErrorCode.Contains("-2"))
        {
            sum.Add(-2);
        }

        if (ErrorCode.Contains("!"))
        {
            sum.Clear();
            sum.Add(5);
        }

        total = sum.Sum(); 
        //This prints total = 5 
        //but should print total = 4 (because of the order of the array)
}

Как мне добиться результата, который динамически печатает любое значение?Таким образом, это будет зависеть от того, как массив был введен с помощью ErrorCode, а не от метода Score if statements.Большое спасибо за помощь!

1 Ответ

0 голосов
/ 21 февраля 2019

Не используйте Contains, когда порядок имеет значение, обрабатывайте каждую команду в следующем порядке:

private static void Score(string[] ErrorCode) {
    total = 0;
    foreach (var ec in ErrorCode) {
        switch (ec) {
            case "@":
                total += 1;
                break;
            case "-2":
                total += -2;
                break;
            case "!":
                total = 5;
                break;
        }
    }
}

Вы должны также Score использовать локальную переменную (sum?) И возвращать результаткогда сделано.Вам следует назвать ErrorCode как errorCodes, так как оно содержит несколько кодов, поэтому:

private static int Score(string[] errorCodes) {
    var sum = 0;
    foreach (var ec in errorCodes) {
        switch (ec) {
            case "@":
                sum += 1;
                break;
            case "-2":
                sum += -2;
                break;
            case "!":
                sum = 5;
                break;
        }
    }

    return sum;
}

total = Score(ErrorCodes);
...