如何进入List <list <node>&gt;中的下一个列表当满足特定条件时</list <node>

时间:2014-04-28 01:15:52

标签: c# list

我有一个List<Node> nodesnode中的每个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#中编程?我的实施是否正确,是否可以改进?

我知道问题很混乱。请问我有什么难以理解的。任何帮助将受到高度赞赏。

1 个答案:

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