目前,我能够将值添加到文本框中,然后将这些值保存到数组中,我想为该数组计算“模式/最常用”值,然后输出到另一个文本框或要在我的网站上显示的内容-页。
例如我输入2、2、2、3、3、3、1。该网页的输出将是2 3。
string[] list = TextBox1.Text.Split(new string[] { "," },
StringSplitOptions.RemoveEmptyEntries);
int[] numbers = new int[list.Length];
for (int i = 0; i < numbers.Length; i++)
{
numbers[i] = Convert.ToInt32(list[i].Trim());
}
int mode = numbers
.GroupBy(x => x)
.OrderByDescending(g => g.Count())
.First()
.Key;
TextBox2.Text = mode.ToString();
答案 0 :(得分:0)
我认为您真的很接近……填充numbers
数组后,我认为您可以这样做以获得所需的结果:
var frequencies = numbers.GroupBy(x => x).ToList();
var maxFrequency = frequencies.Max(n => n.Count());
var modes = frequencies
.Where(n => n.Count() == maxFrequency)
.Select(n => n.Key)
.OrderBy(n => n);
TextBox2.Text = String.Join(",", modes);
答案 1 :(得分:-1)
听起来您想要平均值(2 + 2 + 2 + 3 + 3 + 3 + 1)/ 7 = 2.2857 == 2.3 ????
您可以这样做:
var numbers = new[] { "2", "2 " ,"2", "3", "3", "3", "1" };
var average = numbers.Select(x => Convert.ToInt32(x.Trim())).Average();
MeanTextBox.Text = average.ToString("#.#");
“#。#”的格式设置为小数点后一位。
在您的情况下,如果要从UI中获取这些值,则可能应使用TryParse,以防有人喂您输入诸如“ a”之类的值。
您还应该预先检查列表中的所有元素。元素为0的数组在调用Average()时会引发异常。