Да, вы правы:
Пусть мы имеемсписок из номера:
List<int> myValues = new List<int>(new int[] { 1, 3, 3, 3, 7, 7 });
Вы должны иметь цикл, который проходит через список один раз :
foreach (var val in myValues)
{
}
посмотреть, сколько раз число повторяется в массиве, чтобы сохранить время число повторяется:
Dictionary<int, int> repetitions = new Dictionary<int, int>();
foreach (var val in myValues)
{
if (repetitions.ContainsKey(val))
repetitions[val]++; // Met it one more time
else
repetitions.Add(val, 1); // Met it once, because it is not in dict.
}
Теперь ваш словарь repetitions
хранит сколько (точно значение) раз повторенные ключ значение ,
Затем вам нужно найти запись режима (т. Е. Запись с наивысшим временем повторений (т. Е. Наивысшее значение)) и взять ее. LINQ поможет нам - давайте отсортируем массив по значению и возьмем последний ... или отсортируем его по убыванию и возьмем первый. Фактически, это то же самое с точки зрения результата и производительности.
var modeRecord = repetitions.OrderByDescending(x => x.Value).First();
// or
var modeRecord = repetitions.OrderBy(x => x.Value).Last();
Вот оно! Здесь у нас есть режим:
List<int> myValues = new List<int>(new int[] { 1, 3, 3, 3, 7, 7 });
Dictionary<int, int> repetitions = new Dictionary<int, int>();
foreach (var val in myValues)
{
if (repetitions.ContainsKey(val))
repetitions[val]++; // Met it one more time
else
repetitions.Add(val, 1); // Met it once, because it is not in dict.
}
var modeRecord = repetitions.OrderByDescending(x => x.Value).First();
Console.WriteLine("Mode is {0}. It meets {1} times in an list", modeRecord.Key, modeRecord.Value);
Ваша логика расчета режима хороша. Все, что вам нужно, это следующее собственные инструкции в коде :)
ли это домашнее задание? Если да, существуют ли ограничения в отношении того, какие методы библиотеки вы можете использовать? – phoog