使用Linq检查Dictionary中的泛型列表是否包含值

时间:2013-05-19 08:47:50

标签: linq dictionary foreach generic-list

如何检查字典是否已包含一组坐标?我正在使用SelectManager和Where但计数仍然是错误的。我不认为它检查了通用列表中的值。

我希望它遍历matchTile并检查通用列表中的所有其他元素是否有条件(不是问题的一部分)。

如果符合该条件,则将其添加到同一组。当下一次迭代到来时,它应检查该元素是否已添加到组中。如果是,它会跳过它。如果没有,它会创建一个新组(列表)。

有人可以帮忙吗?

private void groupMatches(List<int[]> matchTile){
    Dictionary<int, List<int[]>> groups = new Dictionary<int, List<int[]>>();
    int i = 0;

    foreach(int[] coord in matchTile){
        var alreadyCounted = groups.SelectMany(x => x.Value).Where(x => x[0] == coord[0] && x[1] == coord[1]);

        Debug.Log ("counted: " + alreadyCounted.Count ());

        if(alreadyCounted.Count() > 0) continue;

        // Create new group
        groups.Add(i, new List<int[]>());   
        groups[i].Add(coord);

        foreach(int[] nextCoord in matchTile){
            if (...)
            {
                groups[i].Add(nextCoord);   
            }
        }

        i++;
    }   

    Debug.Log ("groups: " + groups.Count);
}

1 个答案:

答案 0 :(得分:1)

尝试下一个代码:

private void groupMatches(List<int[]> matchTile)
{    
    Dictionary<int, List<int[]>> groups 
         = matchTile.GroupBy(line => new{x = line[0], y = line[1]})
                    .Select((grp, index) => new{index, grp})
                    .ToDictionary(info => info.index, info => info.grp.ToList());

    Debug.Log("groups: " + groups.Count);
}