2016-11-24 61 views
-4

请帮助我,我想使用两个链接列表,因为我想要的结果就像我的2数组元素。这里是我的代码如何打印两个链接列表程序

class Program 
{ 
    int[] info = { 74, 90, 80, 63 }; 
    int[] link = { 2, 6, 0, 3 }; 


    static void Main(string[] args) 
    { 
     Program newProgram = new StrukturData.Program(); 

     newProgram.Node(); 

     Console.ReadLine(); 
    } 

    public void Node() 
    { 
     LinkedList<int> infoList = new LinkedList<int>(info); 
     LinkedList<int> linkList = new LinkedList<int>(link); 

     foreach (var item in infoList) 
     { 
      Console.Write(item + " "); 

      foreach (var back in linkList) 
      { 
       Console.Write(back + " "); 
      } 
     } 
    } 
} 

输出继电器

74 2 6 0 3 90 2 6 0 3 80 2 6 0 3 63 2 6 0 3 

我预计

74 2 90 6 80 0 63 3 

我认为这个问题是在我的foreach语句。对不起我的英语不好,所以我水湿说话太多:(,但我希望你们能帮助我得到我预期:)结果

+1

http://stackoverflow.com/questions/40768322/合并多个列表与可变长度弹出元素从每个/ 40768526#40768526我的答案会做任何'IEnumerable ':'foreach(var item in Merge(infoList,linkList)){。 ..}' –

+0

想想你在做什么,对于每一件物品如果'infoList'和'linkList'具有*相同数量的项目,您可以使用'Zip':'infoList.Zip(linkList,(a,b)'infoList'打印该项目,然后打印所有'linkList' – FakeCaleb

+0

。 => new int [] {a,b})。SelectMany(x => x);' –

回答

0

如果您正在寻找通用的解决方案(可能是复杂的,虽然),请看看

Merge multiple lists with variable length "popping" elements from each

在我的答案将为任何IEnumerable<T>LinkedList<int>, int[]包括)输入:

public void Node() { 
    Console.Write(string.Join(" ", Merge(info, link))); 
} 

或者,如果你坚持LinkedList<T>

public void Node() { 
    LinkedList<int> infoList = new LinkedList<int>(info); 
    LinkedList<int> linkList = new LinkedList<int>(link); 

    Console.Write(string.Join(" ", Merge(infoList, linkList))); 
} 

在你的情况下,要解决的只是你的确切LinkedList<int>情况:

LinkedList<int> infoList = new LinkedList<int>(info); 
LinkedList<int> linkList = new LinkedList<int>(link); 

// Enumerate each collection 
using (var enInfo = infoList.GetEnumerator()) { 
    using (var enLink = linkList.GetEnumerator()) { 
    bool proceed = true; 

    // until both exausted 
    while (proceed) { 
     proceed = false; 

     if (enInfo.MoveNext()) { 
     proceed = true; 

     Console.Write(enInfo.Current + " "); 
     } 

     if (enLink.MoveNext()) { 
     proceed = true; 

     Console.Write(enLink.Current + " "); 
     } 
    } 
    } 
} 
+0

谢谢,我用最后的代码:) –

+0

@Bagus Arya:不客气! –

2

这里是你的循环应该怎么看起来像

int[] info = { 74, 90, 80, 63 }; 
int[] link = { 2, 6, 0, 3 }; 

for(int i = 0; i < Math.Min(info.Length, link.Length); i++) 
{ 
    Console.Write(info[i] + " "); 
    Console.Write(link[i] + " "); 
} 
1

如果2个数组的大小相同,则前面的解决方案可以工作。

下面是新的循环:

int max = Math.Max(infoList.Count,linkList.Count); 
    for (int i = 0; i < max; i++) 
    { 
     if (i < infoList.Count) 
      Console.Write(infoList.ElementAt(i) + " "); 
     if (i < linkList.Count) 
      Console.Write(linkList.ElementAt(i) + " "); 
    }