Foreach嵌套循环不重复

Foreach Nested Loop No Repetition

这是一个很简单的问题,我一直卡在上面。

我有一个 IEnumerable IGrouping 对象,其中包含分组的公共键项。我现在需要比较 IEnumerable IGrouping 对象本身中的每个相同的公共键项。我使用 2 个 foreach 循环来实现,但问题是 foreach 会导致重复。我需要循环并比较每一项,而不是重复已经通过的一项。

Parallel.ForEach((sameQuickHashGroups, quickHashGroup) =>
{
    foreach (var groupFile in quickHashGroup)
    {
        foreach (var groupFile2 in quickHashGroup)
        {                               
            if (HashTool.ByteToByteCompare(groupFile.FileName, groupFile2.FileName))
            {
                groupFile.FullHash = count.ToString();
                groupFile2.FullHash = count.ToString();
            }                                                           
         }
         count;
     }
});

谁能解决这个问题?

假设我现在理解了这个问题(相对于我的第一个答案),你基本上是在问如何只比较每对元素一次。

我会在 IEnumerable 上使用 Linq 的 ToList(),然后使用 for 循环而不是 foreach 循环。
这样你就可以只比较每对元素一次:

var quickHashGroupList = quickHashGroup.ToList();
for(var i = 0; i < quickHashGroupList.Count-1; i++)
{
    var groupFile = quickHashGroupList[i];
    for(var j = i+1; j < quickHashGroupList.Count; j++)
    {
        var groupFile2 = quickHashGroupList[j];
        if (HashTool.ByteToByteCompare(groupFile.FileName, groupFile2.FileName))
        {
            groupFile.FullHash = count.ToString();
            groupFile2.FullHash = count.ToString();
        }     
    }
}

请注意,第一个循环只进行到 count-2,因为第二个循环从 i+1 开始。