将List <node>节点拆分为List <list <nodes>&gt; listofnodes基于与节点相关的参数</list <nodes> </node>

时间:2014-04-30 02:21:22

标签: c# list

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

我在generateRandom()

中使用static void main,如下所示
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. 假设有List<List<Nodes>> listofnodes。 listofnodes中的每个List(例如,说listofnodes [0] - &gt;这是第一个元素和一个列表)。具有用户定义的最大容量。在我们的例子中,让它为10。
  2. 我想要一个forloop来检查节点中每个节点的密度。如果它大于5,它应该进入listofnodes的一个列表。现在,假设有100个节点,其中55个密度大于5.前10个应该在listofnodes [i]列表中,而nextofnodes [i + 1] ...直到所有55个都在其中一个列表中listofnodes。但只有条件是listofnodes[i]listofnodes[i+1]的大小或者不应该大于10的大小。这是我尝试的但是显然没有成功:

    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. 如果这个逻辑是正确的,那我错了?
    2. 将非常感谢帮助解决此问题。

3 个答案:

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

答案 1 :(得分:1)

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

here获取想法。

答案 2 :(得分:0)

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