我想比较两个具有 all 个可能变化形式的对象。我该怎么办。
var _entries = new List<string>();
_entries.Add("Awesom");
_entries.Add("Awesom");
_entries.Add("Awesom");
_entries.Add("Awesom");
int count = 0;
for (int i = 1; i < _entries.Count; i++)
{
if (_entries[i].Equals(_entries[i - 1]))
{
count++;
}
}
Console.Write(count);
Console.ReadLine();
这是按顺序进行比较,但应该与所有可能的方案进行比较。
预期结果应为4
,因为数组中有4
个相同的对象。
答案 0 :(得分:5)
我建议使用 Linq ,GroupBy:
using System.Linq;
...
// No Sequential Order test
var _entries = new List<string>() {
"Awesom",
"Bar",
"Awesom",
"Awesom",
"Foo",
"Awesom",
"Bar",
};
int count = _entries
.GroupBy(item => item)
.Sum(group => group.Count() - 1);
在GroupBy
的帮助下,我们获得了3
个组:
4 items of "Awesom"
1 items of "Foo"
2 items of "Bar"
然后,我们只能在每个组中Count
个项目,Sum
个项目:(4 - 1) + (1 - 1) + (2 - 1) == 4
整体重复。
答案 1 :(得分:0)
当您说这是按顺序比较,但它应该与每种可能的情况进行比较。我相信您期望的值为 count = 16 。通过与所有可能的值进行比较,您将获得16种组合,并且所有值相等时,您将获得16个组合。
var _entries = new List<string>();
_entries.Add("Awesom");
_entries.Add("Awesom");
_entries.Add("Awesom");
_entries.Add("Awesom");
var query = from e1 in _entries
from e2 in _entries
where e1 == e2
select $"{e1} x {e2}";
var count = query.Count();
尝试打印查询变量的值,您将看到所有组合。