は、私は非常に少なくとも配列内のN番目に頻繁に出現する要素をより効率的かつコンパクトに見つけるための手続きをどのようにすることができますか?ここで
using System;
using System.Linq;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
int[] arr = new int[] { 1, 2, 2, 3, 3, 3, 4, 4, 4, 4 };
var countlist = arr.Aggregate(new Dictionary<int,int>(), (D,i) => {
D[i] = D.ContainsKey(i) ? (D[i] + 1) : 1;
return D;
})
.AsQueryable()
.OrderByDescending(x => x.Value)
.Select(x => x.Key)
.ToList();
// print the element which appears with the second
// highest frequency in arr
Console.WriteLine(countlist[2]); // should print 3
}
}
を思い付いたソリューションの一例ですが、私は少なくとも1でクエリ句を削減する方法に
把握したいと思います。私は冗長性は見ませんが、これはLINQクエリの一種です。ここでは、作成されたすべての中間構造のすべてのオーバーヘッドについて心配しています。
最後にリスト全体を返さない方法を解説します。列挙されたシーケンスの2番目の要素がほしいだけです。 1つの要素を取り除く目的でリスト全体を返す必要はありません。
にessentialyである、それは大丈夫です、あなたが探しているとして、辞書を思い付いたあなたは.SKIP()と.FirstOrDefaultを(使用する場合)直前に.ToList()? – shole