计算模式,然后上传到文本框C#

时间:2018-11-29 20:06:48

标签: c#

目前,我能够将值添加到文本框中,然后将这些值保存到数组中,我想为该数组计算“模式/最常用”值,然后输出到另一个文本框或要在我的网站上显示的内容-页。

例如我输入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();

2 个答案:

答案 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”之类的值。

int.TryParse documentation

您还应该预先检查列表中的所有元素。元素为0的数组在调用Average()时会引发异常。