重複の可能性:
LINQ を使用して配列内で最も頻繁に使用される数値を見つける
List<int> demoList
のようなint, のリストがあり{1, 2, 1, 1, 1, 3, 2, 1}
、そのリストから出現回数が最も多い番号を取得するための LINQ ステートメントを書きたいと思います。私の場合は1
です。
重複の可能性:
LINQ を使用して配列内で最も頻繁に使用される数値を見つける
List<int> demoList
のようなint, のリストがあり{1, 2, 1, 1, 1, 3, 2, 1}
、そのリストから出現回数が最も多い番号を取得するための LINQ ステートメントを書きたいと思います。私の場合は1
です。
var list = new[] { 1, 2, 1, 1, 1, 3, 2, 1 };
var result = list
.GroupBy(x => x)
.Select(x => new { Number = x.Key, Count = x.Count() })
.OrderByDescending(x => x.Count)
.FirstOrDefault();
Console.WriteLine("highest number = {0}, count = {1}", result.Number, result.Count);
int highestAppearanceNum = demoList.GroupBy(i => i)
.OrderByDescending(grp => grp.Count())
.Select(grp => grp.First())
.First();
編集:どの番号がどのくらいの頻度で表示されるかを知りたい場合:
var appearances = demoList.GroupBy(i => i)
.OrderByDescending(grp => grp.Count())
.Select(grp => new { Num = grp.Key, Count = grp.Count() });
if (appearances.Any())
{
int highestAppearanceNum = appearances.First().Num; // 1
int highestAppearanceCount = appearances.First().Count; // 5
}
var query =
from i in demoList
group i by i into g
orderby g.Count() descending
select new { Value = g.Key, Count = g.Count() };
var result = query.First();
Console.WriteLine(
"The number with the most occurrences is {0}, which appears {1} times",
result.Value,
result.Count);
group by
句を使用します。
var groups =
from i in demoList
group i by i into g
select new { Value = g.Key, Count = g.Count() }
ここからあなたは言うことができます
var max = groups.Max(g => g.Count);
groups.Where(g => g.Count == max).Select (g => g.Value); // { 1 }
前もってお詫び申し上げます:
List<int> demoList = new List<int>() { 1, 2, 1, 1, 1, 3, 2, 1 };
Dictionary<int,int> keyOrdered = demoList.GroupBy(i => i)
.Select(i => new { i.Key, Count = i.Count() })
.OrderBy(i=>i.Key)
.ToDictionary(i=>i.Key, i=>i.Count);
var max = keyOrdered.OrderByDescending(i=>i.Value).FirstOrDefault();
List<string> histogram = new List<string>();
for (int i = max.Value; i >-1 ; i--)
{
histogram.Add(string.Concat(keyOrdered.Select(t => t.Value>i?"| ":" ")));
}
histogram.Add(string.Concat(keyOrdered.Keys.OrderBy(i => i).Select(i => i.ToString() + " ")));
histogram.ForEach(i => Console.WriteLine(i));
Console.WriteLine(Environment.NewLine);
Console.WriteLine("Max: {0}, Count:{1}", max.Key, max.Value);
タイトルを読んだとき、私はこれを考え、それは私を笑顔にしました.. (バグもいっぱい!)