文字列の大きなリストがあります。リストに正確に 5 回複製された文字列が含まれているかどうかを知りたいです。
アイテムが 6 回以上重複している場合、知りたくありません。
リストを1つずつ調べて、各文字列のインスタンスの数を数えるよりも良い方法に違いないと思いますか?
彼らはそれを行うための簡単なLINQの方法ですか?
文字列の大きなリストがあります。リストに正確に 5 回複製された文字列が含まれているかどうかを知りたいです。
アイテムが 6 回以上重複している場合、知りたくありません。
リストを1つずつ調べて、各文字列のインスタンスの数を数えるよりも良い方法に違いないと思いますか?
彼らはそれを行うための簡単なLINQの方法ですか?
カウントを行うには、リスト全体を少なくとも 1 回反復処理する必要があることは明らかであるため、パフォーマンスの面で優れているものはありません。ただし、LINQ では、より少ないコードでうまくいくことができます。それは事実です。このような何かがうまくいくはずです:
var listOfFiveTimers = list.GroupBy(s => s)
.Where(g => g.Count() == 5)
.Select(g => g.Key)
.ToList();
stringListName.GroupBy(x => x).Any(x => x.Count() == 5);
を使用してテスト
var stringListName = new string[] { "a", "a", "a", "a", "a", "b" };
bool duplicated5times = list.GroupBy(x=>x).Any(x=>x.Count() == 5);
List<string> l = new List<string>();
l.Add("a");
l.Add("a");
l.Add("a");
l.Add("b");
l.Add("b");
l.Add("b");
l.Add("b");
l.Add("b");
l.Add("c");
l.Add("c");
l.Add("c");
l.Add("c");
l.Add("c");
l.Add("c");
l.GroupBy
(
x => x
)
.Select
(
x =>
new
{
x.Key,
count = x.Count ()
}
)
.Where
(
x => x.count==5
);
綺麗じゃないけどこれならいける
static void Main(string[] args)
{
var items = new[] {1, 1, 1, 1, 1, 3, 2, 1, 5, 2};
var over = items.Distinct().ToList().Where(i=>items.Where(it => it == i).Count() > 5);
Console.Read();
}