-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathExtensionsTask.cs
More file actions
50 lines (48 loc) · 1.81 KB
/
ExtensionsTask.cs
File metadata and controls
50 lines (48 loc) · 1.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
using System;
using System.Collections.Generic;
using System.Linq;
namespace linq_slideviews
{
public static class ExtensionsTask
{
/// <summary>
/// Медиана списка из нечетного количества элементов — это серединный элемент списка после сортировки.
/// Медиана списка из четного количества элементов — это среднее арифметическое
/// двух серединных элементов списка после сортировки.
/// </summary>
/// <exception cref="InvalidOperationException">Если последовательность не содержит элементов</exception>
public static double Median(this IEnumerable<double> items)
{
var listOfItems = items.ToList();
listOfItems.Sort();
if (listOfItems.Count == 0)
throw new InvalidOperationException();
else if (listOfItems.Count % 2 == 1)
return listOfItems[listOfItems.Count / 2];
else
return (listOfItems[listOfItems.Count / 2 - 1] + listOfItems[listOfItems.Count / 2]) / 2;
}
/// <returns>
/// Возвращает последовательность, состоящую из пар соседних элементов.
/// Например, по последовательности {1,2,3} метод должен вернуть две пары: (1,2) и (2,3).
/// </returns>
public static IEnumerable<Tuple<T, T>> Bigrams<T>(this IEnumerable<T> items)
{
T tempFirst = default(T);
bool isTempTupleEmpty = true;
foreach (var item in items)
{
if (isTempTupleEmpty)
{
tempFirst = item;
isTempTupleEmpty = false;
}
else
{
yield return new Tuple<T, T>(tempFirst, item);
tempFirst = item;
}
}
}
}
}