如何比较所有对象。

时间:2019-07-02 14:03:05

标签: c# .net

我想比较两个具有 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个相同的对象。

2 个答案:

答案 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();

尝试打印查询变量的值,您将看到所有组合。