Суммируйте некоторые элементы в списке, состоящем из строк в C # - PullRequest
0 голосов
/ 04 сентября 2018

Я пытаюсь рассчитать загрузку ЦП на ядро ​​в Linux с помощью кода C #. Когда я выполняю cat /proc/stat | grep cpu, мой вывод выглядит точно так же, как строка cpu_usage. Затем я создаю список для каждой строки и хочу рассчитать загрузку ЦП по (1 - (cpu_usage_row_split[4] / sum(cpu_usage_row_split[1:]))) * 100 Так что в целом я хочу удалить четвертый элемент в списке (использование ЦП в режиме ожидания) до суммы всех элементов (user, nice , system, idle, iowait, irq, softirq), исключая первое (номер ЦП) для получения загрузки ЦП отдельных ядер ЦП. Я знаю, что могу просто преобразовать элементы в целое, а затем суммировать каждый элемент, но я хочу использовать нечто похожее на функцию Python sum(lst[1:]).

using System;
using System.Linq;

    public class Program
    {
        public static void Main()
        {
            string cpu_usage = @"cpu  16272 1158 46722 553911117 31493 0 158 0 0 0
    cpu0 2099 184 5874 34608555 408 0 56 0 0 0 
    cpu1 586 0 1544 34624437 314 0 12 0 0 0
    cpu2 1162 0 3184 34618796 1854 0 8 0 0 0
    cpu3 609 4 1594 34624014 411 0 3 0 0 0";

            string[] cpu_usage_arr = cpu_usage.Split('\n');
            for (int i = 0; i < cpu_usage_arr.Length; i++)
            {
                string cpu_usage_row = cpu_usage_arr[i];
                string[] cpu_usage_row_split = cpu_usage_row.Split(' ');
                cpu_usage_row_split = cpu_usage_row_split.Where(x => !string.IsNullOrEmpty(x)).ToArray();
            }
        }
    }

Ответы [ 2 ]

0 голосов
/ 04 сентября 2018

Я бы использовал int.TryParse, чтобы избежать ошибки System.FormatException при преобразовании строк в числа. Предметы, которые не пройдут, добавят 0 к сумме. Обтекание TryParse в статической функции Я могу использовать эту функцию в cpu_usage_row_split.Sum(x => AsInt(x))

[TestMethod]
public void test_sum_string()
{
    string cpu_usage = @"cpu  16272 1158 46722 553911117 31493 0 158 0 0 0
    cpu0 2099 184 5874 34608555 408 0 56 0 0 0 
    cpu1 586 0 1544 34624437 314 0 12 0 0 0
    cpu2 1162 0 3184 34618796 1854 0 8 0 0 0
    cpu3 609 4 1594 34624014 411 0 3 0 0 0";

    string[] cpu_usage_arr = cpu_usage.Split('\n');
    for (int i = 0; i < cpu_usage_arr.Length; i++)
    {
          string cpu_usage_row = cpu_usage_arr[i];
          string[] cpu_usage_row_split = cpu_usage_row.Split(' ');
          var totalUsage = cpu_usage_row_split.Sum(x => AsInt(x));
          Console.WriteLine(totalUsage);
    }
}

private static int AsInt(string value)
{
      int i = 0;
      bool b = int.TryParse(value, out i);
      return b ? i : 0;
}
0 голосов
/ 04 сентября 2018

Вам нужно преобразовать строки в int:

var sum = cpu_usage_row_split.Select(x => int.Parse(x)).Sum();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...