VB.NET - 如何找到数组中的所有模式(最常出现的数字)
VB.NET - How to find all modes (most frequent occurring numbers) in an array
因此众数是数据集中出现频率最高的数字。
我已经解决了,但是只能得到1种模式。
这是我的代码:
Dim mode = inputX.GroupBy(Function(n) n).Select(Function(g) New With {.Number = g.Key, .Quantity = g.Count}).OrderByDescending(Function(o) o.Quantity).FirstOrDefault
If mode.Quantity > 1 Then
result = mode.Number.ToString() + " Quantity: " + mode.Quantity.ToString()
Else
result = "None."
End If
现在即使我输入了29 29 35 30 30
,它有2个模式,它只显示29
,这是它得到的第一个模式。我想获得两种或更多模式。
我一直在绞尽脑汁,一直在寻找答案,但我无法解决。
我两天前才开始学习这门语言。
引用 LINQ: Mean, Median, and Mode 中的评论:
Dim inputX = {29, 29, 35, 30, 30}
Dim modes = From a In
(From n In inputX
Group n By n Into g = Count()
Select g, n)
Where a.g =
(From n In inputX
Group n By n Into g = Count() Select g).Max
Select a.n
Console.WriteLine(String.Join(", ", modes))
输出:
29, 30
因此众数是数据集中出现频率最高的数字。
我已经解决了,但是只能得到1种模式。 这是我的代码:
Dim mode = inputX.GroupBy(Function(n) n).Select(Function(g) New With {.Number = g.Key, .Quantity = g.Count}).OrderByDescending(Function(o) o.Quantity).FirstOrDefault
If mode.Quantity > 1 Then
result = mode.Number.ToString() + " Quantity: " + mode.Quantity.ToString()
Else
result = "None."
End If
现在即使我输入了29 29 35 30 30
,它有2个模式,它只显示29
,这是它得到的第一个模式。我想获得两种或更多模式。
我一直在绞尽脑汁,一直在寻找答案,但我无法解决。
我两天前才开始学习这门语言。
引用 LINQ: Mean, Median, and Mode 中的评论:
Dim inputX = {29, 29, 35, 30, 30}
Dim modes = From a In
(From n In inputX
Group n By n Into g = Count()
Select g, n)
Where a.g =
(From n In inputX
Group n By n Into g = Count() Select g).Max
Select a.n
Console.WriteLine(String.Join(", ", modes))
输出:
29, 30