-1

这是一个非常简单的问题,我一直坚持。

我有一个 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;
     }
});

谁能解决这个问题?

4

1 回答 1

0

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

我会ToList()在 IEnumerable 上使用 Linq,然后使用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 开始。

于 2017-11-21T11:27:44.570 回答