問題: int のリストがあり、2 回以上存在する数値を取得したい。
List<int> firstList = new List<int> { 1, 1, 3 };
期待される結果:
{ 1 }
これはLINQで簡単に実行できます..たとえば、これ
var result = firstList.Where(c => firstList.Count(d => c == d) > 1).Distinct();
問題は、これが複数の反復を行うことです。通常の for ループでは、O(N) の時間に到達できます。
List<int> result = new List<int>();
HashSet<int> doubles = new HashSet<int>();
foreach (var v in firstList)
{
if (!doubles.Contains(v))
doubles.Add(v);
else
result.Add(v);
}
これが linq aswel でやりたいことです...
HashSet<int> doubles = new HashSet<int>();
var result = firstList.Where((c) => doubles.Contains(c) ? true : !doubles.Add(c)).ToList();
これは私が考えることができる唯一の方法です..
質問:
LINQ 内で "新しい HashSet" を宣言する方法はありますか? 私は次のようなことを考えていfirstList.Aggregate((c, d = new HashSet<int>) =>
ます..