拆分列表<;节点>;节点进入列表<;列表<;节点>>;基于和节点相关联的参数的节点列表

本文关键字:节点 列表 lt gt 关联 参数 拆分 | 更新日期: 2023-09-27 18:00:46

我有一个List<Node> nodesclass Node可以定义如下:

 public class Node
{
    public int Density { get; set; }
    public List<Edge> adjnodes { get; set; }

    public Node()
    {
        adjnodes = new List<Edge>();
    }
    public static int GetDensity(Node n)
    {
        return n.Density;
    }
}

现在,节点中的每个节点都有一个与其相关的密度值,该值是使用以下随机函数计算的:

private static Random rnd = new Random();  
public static int generateRandom(int min, int max)
        {
            int random = rnd.Next(min, max);
            return random;
        }

我在static void main:中使用generateRandom()如下

for (int i = 0; i < n; i++)
        {
            int densityRandom = YelloWPages.generateRandom(1, 10);
            nodes[i].Density = densityRandom;
            Console.WriteLine("Node is " + nodes[i] + "and density " + nodes[i].Density + "Interest.Array[0] " + nodes[i].P1.InterestArray[0]);
        }

我的问题如下:

  1. 假设有一个CCD_ 5。节点列表中的每个List(例如说节点列表[0]->,它是第一个元素和一个列表)。具有用户定义的最大容量。在我们的例子中,让它是10

我想要一个forloop来检查节点中每个节点的密度。如果它大于5,它应该进入listofnodes的列表之一。现在,假设有100个节点,其中55个节点的密度大于5。前10个应该在某个节点[i]列表中,而下一个10在节点[i+1]列表中。。。直到所有55个都在一个节点列表中。但唯一的条件是CCD_ 7或CCD_。这是我尝试过的东西,但显然没有成功:

public static void DivideandInsert(List<Node> list)
    {
        List<List<Node>> smallList = new List<List<Node>>();
        for (int i = 0; i < list.Count; i++)
        {
            for (int k = 0; k < smallList.Count; k++)
            {
                if (list[i].Density > 5 && smallList[k].Count != 10)
                {
                    smallList[k].Add(list[i]);
                }
                else smallList[k + 1].Add(list[i]);
            }
        }
    }

如果真的有用的话。但在执行操作后,它会将smallList的大小设置为0。

  1. 如果所有这些逻辑都是正确的,我哪里错了

我们将非常感谢您帮助解决此问题。

拆分列表<;节点>;节点进入列表<;列表<;节点>>;基于和节点相关联的参数的节点列表

我认为你应该这样做,而不是

public static void DivideandInsert(List<Node> list)
   {
        List<List<Node>> smallList = new List<List<Node>>();
         //an extra list
        List<Node> filtered_list = new List<Node>(); 
     //This part will get you all the 55 nodes with density > 5
     foreach(Node n in list) 
     {
       if(n.Density > 5)
       {
           filtered_list.Add(n);
       }
    } 
  int count  = filtered_list.Count;
  int sublist_count  = (count % 10 == 0) ? count / 10 : count / 10 + 1;
       for(int i=0;i<sublist_count;i++)
        {
                List<Node> sublist = new List<Node>();
                for (int k = 0; k < 10; k++)
                {
                    sublist.Add(filtered_list[k]);
                }
            smallList.Add(sublist);
        }   
  }
List<List<Node>> smallList = 
    nodes.Where(n => n.Density > 5)
         .Select((x, i) => new { Index = i, Value = x })
         .GroupBy(x => x.Index / 10)
         .Select(x => x.Select(v => v.Value).ToList())
         .ToList();

从这里获得想法。

当您尝试访问smallList时,它是空的。