我有List<Node> nodes
。 class 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]);
}
我的问题如下:
List<List<Nodes>> listofnodes
。 listofnodes中的每个List(例如,说listofnodes [0] - &gt;这是第一个元素和一个列表)。具有用户定义的最大容量。在我们的例子中,让它为10。我想要一个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。
将非常感谢帮助解决此问题。
答案 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为空。