2016-11-24 4 views
-4

두 개의 연결된 목록을 사용하는 데 도움이되도록 도와주세요. 그 결과는 제 2 배열 요소와 같기를 바랍니다. 여기에 내가 그 문제는 내 foreach 문에 생각 두 개의 연결된 목록 프로그램을 인쇄하는 방법

74 2 90 6 80 0 63 3 

을 예상 무엇

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

OUPUT 내 코드

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 + " "); 
      } 
     } 
    } 
} 

입니다. 죄송 임 그래서 많은 :(이야기라도하게 나쁜 영어 내,하지만 난 너희들이 내가 예상했던 것 :) 결과를 얻을하는 데 도움 수 있기를 바랍니다

다음
+1

http://stackoverflow.com/questions/40768322/ 각 40768526 # 40768526 내 대답은 모든 IEnumerable '에 대해 수행 할 것입니다 : foreach (병합 항목에서 정보 항목 (infoList, linkList)) {. ..}' –

+0

당신이하고있는 일에 대해 생각해보십시오. 'infoList' 당신이 그 항목을 출력하면'infoList'와'linkList'가'Zip'을 사용할 수있는 항목의 개수와 같은 *를 가지고 있다면'linkList' – FakeCaleb

+0

모두를 출력합니다 : infoList.Zip (linkList, (a, b) –

답변

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) + " "); 
    }