Вычислить медианное значение

  • Автор темы Автор темы Zellweger
  • Дата начала Дата начала

Zellweger

Client
Регистрация
14.12.2022
Сообщения
20
Реакции
4
Баллы
3
Здравствуйте. Есть список, в списке числа, из них нужно вычислить медианное значение(не среднее арифметическое). Кто умеет,напишите,пожалуйста, код. Готовые коды из гугла не способствовали решению проблемы. Возможно, это из-за того,что я плохо умею читать код, по этой же причине, прошу, напишите, инструкцию, куда вносить значение из переменной.
 
C#:
Развернуть Свернуть Копировать
// Список с данными
var list = project.Lists["list"];

// Заполняем демо данными
list.Add("1");
list.Add("5");
list.Add("4");
list.Add("7");
list.Add("10");

// Переводим значения в числа, удаляем дубли
var data = list.Select(x=>int.Parse(x)).Distinct().ToList();
// Сортируем по возрастанию
data.Sort();

// Вычисляем медиану
int mediana = data.Count%2 == 0
        ? (data[data.Count/2-1] + data[data.Count/2])/2
        : data[data.Count/2];
        
// Возвращаем результат       
return mediana;
 
C#:
Развернуть Свернуть Копировать
// Список с данными
var list = project.Lists["list"];

// Заполняем демо данными
list.Add("1");
list.Add("5");
list.Add("4");
list.Add("7");
list.Add("10");

// Переводим значения в числа, удаляем дубли
var data = list.Select(x=>int.Parse(x)).Distinct().ToList();
// Сортируем по возрастанию
data.Sort();

// Вычисляем медиану
int mediana = data.Count%2 == 0
        ? (data[data.Count/2-1] + data[data.Count/2])/2
        : data[data.Count/2];
       
// Возвращаем результат      
return mediana;
Спасибо! Написано подробно, но я все же поясню для тех, кто наткнется на эту тему через поиск:
var list = project.Lists["list"]; - значение внутри кавычек необходимо заменить на название вашего списка;

// Заполняем демо данными
list.Add("1");
list.Add("5");
list.Add("4");
list.Add("7");
list.Add("10"); - эти 5 строк можно удалить, они приведены для корректной работы кода без данных в списке.

Код написан грамотно, поэтому возможно вычислить медианное значение в списке состоящего и из нечетного количества чисел.
 
  • Оценить
Реакции: BAZAg и djaga
как будет выглядеть код без удаления дублей?
 
C#:
Развернуть Свернуть Копировать
// Переводим значения в числа
var data = list.Select(x=>int.Parse(x)).ToList();
 
  • Оценить
Реакции: Evgenyto
Всем привет. Не могу победить ошибку несколько дней - прошу направить:
"Выполнение действия CSharp OwnCode: Вычисляю медиану. Input string was not in a correct format."

C#:
Развернуть Свернуть Копировать
// Список с данными
var list = project.Lists["lstBuffer"];

// Переводим значения в числа, удаляем дубли
var data = list.Select(x=>double.Parse(x)).Distinct().ToList();
// Сортируем по возрастанию
data.Sort();

// Вычисляем медиану
double mediana = data.Count%2 == 0
       ? (data[data.Count/2-1] + data[data.Count/2])/2
       : data[data.Count/2];
        
// Возвращаем результат       
return mediana;

В списке данные:
C#:
Развернуть Свернуть Копировать
23
26
30
23.71
26.47
30.69
23.65
27.86
31.19

Проблема очевидно с double, т.к. если из списка убираю дробные значения - то код отрабатывает. Заранее спасибо
 
Всем привет. Не могу победить ошибку несколько дней - прошу направить:
"Выполнение действия CSharp OwnCode: Вычисляю медиану. Input string was not in a correct format."

C#:
Развернуть Свернуть Копировать
// Список с данными
var list = project.Lists["lstBuffer"];

// Переводим значения в числа, удаляем дубли
var data = list.Select(x=>double.Parse(x)).Distinct().ToList();
// Сортируем по возрастанию
data.Sort();

// Вычисляем медиану
double mediana = data.Count%2 == 0
       ? (data[data.Count/2-1] + data[data.Count/2])/2
       : data[data.Count/2];
       
// Возвращаем результат      
return mediana;

В списке данные:
C#:
Развернуть Свернуть Копировать
23
26
30
23.71
26.47
30.69
23.65
27.86
31.19

Проблема очевидно с double, т.к. если из списка убираю дробные значения - то код отрабатывает. Заранее спасибо


C#:
Развернуть Свернуть Копировать
Замените:
double.Parse(x);

На:
double.Parse(x.Replace(".",",").Trim());
 
  • Оценить
Реакции: fuzzZy

Кто просматривает тему: (Всего: 0, Пользователи: 0, Гости: 0)