Как распечатать две программы Linked List
Пожалуйста, помогите мне, я пытаюсь использовать два связанных списка, потому что я хочу, чтобы результат был похож на мой элемент массива 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 + " ");
}
}
}
}
Ouput
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. Извините, мой английский плохой, поэтому я не могу много говорить:(, но я надеюсь, что вы, ребята, сможете помочь мне получить результат, который я ожидал:)
3 ответа
Если вы ищете универсальное решение (которое может быть сложным, хотя), пожалуйста, посмотрите на
Объединение нескольких списков с "выталкивающими" элементами переменной длины из каждого
где мой ответ подойдет для любого 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 + " ");
}
}
}
}
Вот как должна выглядеть ваша петля
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] + " ");
}
Предыдущее решение работает, если размер двух массивов одинаков.
Вот новый цикл:
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) + " ");
}