拆分列表<;节点>;节点进入列表<;列表<;节点>>;基于和节点相关联的参数的节点列表
本文关键字:节点 列表 lt gt 关联 参数 拆分 | 更新日期: 2023-09-27 18:00:46
我有一个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;
}
我在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]);
}
我的问题如下:
- 假设有一个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。
- 如果所有这些逻辑都是正确的,我哪里错了
我们将非常感谢您帮助解决此问题。
我认为你应该这样做,而不是
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时,它是空的。