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

Zellweger

Client
Регистрация
14.12.2022
Сообщения
20
Благодарностей
4
Баллы
3
Здравствуйте. Есть список, в списке числа, из них нужно вычислить медианное значение(не среднее арифметическое). Кто умеет,напишите,пожалуйста, код. Готовые коды из гугла не способствовали решению проблемы. Возможно, это из-за того,что я плохо умею читать код, по этой же причине, прошу, напишите, инструкцию, куда вносить значение из переменной.
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 767
Благодарностей
2 414
Баллы
113
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;
 

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;
Спасибо! Написано подробно, но я все же поясню для тех, кто наткнется на эту тему через поиск:
var list = project.Lists["list"]; - значение внутри кавычек необходимо заменить на название вашего списка;

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

Код написан грамотно, поэтому возможно вычислить медианное значение в списке состоящего и из нечетного количества чисел.
 
  • Спасибо
Реакции: BAZAg и djaga

Evgenyto

Client
Регистрация
04.01.2017
Сообщения
11
Благодарностей
1
Баллы
3
как будет выглядеть код без удаления дублей?
 

Alex733

Client
Регистрация
27.11.2017
Сообщения
323
Благодарностей
238
Баллы
43
C#:
// Переводим значения в числа
var data = list.Select(x=>int.Parse(x)).ToList();
 
  • Спасибо
Реакции: Evgenyto

fuzzZy

Client
Регистрация
15.10.2015
Сообщения
18
Благодарностей
4
Баллы
3
Всем привет. Не могу победить ошибку несколько дней - прошу направить:
"Выполнение действия 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, т.к. если из списка убираю дробные значения - то код отрабатывает. Заранее спасибо
 

BAZAg

Client
Регистрация
08.11.2015
Сообщения
1 767
Благодарностей
2 414
Баллы
113
Всем привет. Не могу победить ошибку несколько дней - прошу направить:
"Выполнение действия 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

fuzzZy

Client
Регистрация
15.10.2015
Сообщения
18
Благодарностей
4
Баллы
3
Последнее редактирование:
  • Спасибо
Реакции: BAZAg

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