我有一个List<Node> nodes
,node
中的每个nodes
都有一个名为Interest
的变量。
public static List<Node> nodes = new List<Node>();
for (int i = 0; i < Program.n; i++)
{
//int densityrandom = generateRandom();
Node n = new Node(Interest3);
Program.nodes.Add(n);
}
虽然类节点如下:
public class Node
{
public int Density { get; set; }
public InterestProfile P1 { get; set; }
public List<Edge> adjnodes { get; set; }
public Node(InterestProfile a)
{
adjnodes = new List<Edge>();
P1 = a;
}
}
对于Interest1
类型的某个对象InterestProfile
,有一个与之关联的数组,如
Interest1 = new InterestProfile(array1);
所以,如果您执行nodes[0].P1.InterestArray[0]
之类的操作,它会在array1
中为我提供第一个元素。
现在这是我的实际问题:
我根据用户输入将列表nodes
拆分为Node列表列表。因此,如果nodes
中有100个元素,它将被分成10个列表,所有这些列表将存储在一个列表中。
这是我想到的:
List<List<Node>> smallList = new List<List<Node>>();
for (int i = 0; i < nodes.Count; i++)
{
for(int k=0; k < smallList.Count; k++)
{
if (list[i].P1.InterestArray[0] > 5 && smallList[k].Count != 10)
{
smallList[0].Add(list[i]);
}
else smallList[k+1].Add(list[i]);
}
等等,检查与特定节点关联的数组中的所有5个元素。但是,当smallList[0]
达到10的限制时,我想开始在其他nodes
中添加来自smallList[i]
的元素。如果为InterestArray[j]
中的所有节点检查了特定nodes
的所有值,则只应移至检查InterestArray[j+1]
。我怎样才能在c#中编程?我的实施是否正确,是否可以改进?
我知道问题很混乱。请问我有什么难以理解的。任何帮助将受到高度赞赏。
答案 0 :(得分:1)
为什么不在现有的List<List<Node>>
查询您需要的节点时,而不是创建List<Node>
数据结构?
e.g。
旧学校:
var interestingNodes = new List<Node>();
foreach(Node node in nodes)
{
foreach(int i in note.InterestArray)
{
if(i > 5)
interestingNodes.Add(node);
}
}
使用List<T>.FindAll()
:
var interstingNodes = nodes.FindAll(node => node.P1.InterestArray.Contains(5));
或者在LINQ中:
var interstingNodes = from node in nodes
where node.P1.InterestArray.Contains(5)
select node;