【发布时间】:2013-08-02 09:58:29
【问题描述】:
我有一个很大的字符串列表。我想知道列表是否包含任何重复 5 次的字符串。
如果该项目重复 6 次或更多我不想知道。
我认为他们一定是比逐个遍历列表并计算每个字符串有多少个实例更好的方法?
他们是一种简单的 LINQ 方法吗?
【问题讨论】:
-
“他们是一种简单的 LINQ 方法吗?”当然有,但并不比一个一个地浏览列表“更好”。
标签: c# linq list duplicates
我有一个很大的字符串列表。我想知道列表是否包含任何重复 5 次的字符串。
如果该项目重复 6 次或更多我不想知道。
我认为他们一定是比逐个遍历列表并计算每个字符串有多少个实例更好的方法?
他们是一种简单的 LINQ 方法吗?
【问题讨论】:
标签: c# linq list duplicates
在性能方面没有什么比这更好的了,因为您显然需要至少遍历整个列表一次才能进行计数。但是在 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();
}
【讨论】: