2012-10-08 2 views
1

Я понимаю, что нет возможности заменить значение на LinkedList.Enumerator.Заменить значение элемента LinkedList с помощью LinkedList.Enumerator

Например, я пытаюсь порта ниже Java кода C#:

Java код:

ListIterator<Double> itr1 = linkedList1.listIterator(); 
ListIterator<Double> itr2 = linkedList2.listIterator(); 
while(itr1.hasNext() && itr2.hasNext()){ 
    Double d = itr1.next() + itr2.next(); 
    itr1.set(d); 
} 

C# код:

LinkedList<Double>.Enumerator itr1 = linkedList1.GetEnumerator();    
LinkedList<Double>.Enumerator itr2 = linkedList2.GetEnumerator(); 

while(itr1.MoveNext() && itr2.MoveNext()){     
    Double d = itr1.Current + itr2.Current; 
    // Opps. Compilation error! 
    itr1.Current = d; 
} 

Любые другие методы I можешь использовать?

ответ

5

С # LinkedList Перечислитель перечисляет значения, а не Узлы.

Если вы хотите изменить узлы, как и в версии Java, я думаю, вы должны «перечислить» узлы вручную:

LinkedListNode<Double> nod1 = linkedList1.First; 
LinkedListNode<Double> nod2 = linkedList2.First; 
while (nod1 != null && nod2 != null) 
{ 
    Double d = nod1.Value + nod2.Value;    
    nod1.Value = d; 
    nod1 = nod1.Next; 
    nod2 = nod2.Next; 
} 
+0

Очень красивая техника. Благодарю. –

0

Может быть, это достаточно просто построить новый список:

linkedList1 = new LinkedList<double> (linkedList1.Zip(linkedList2, (first, second) => first + second)); 

Если вам нужен первоначальный список будет изменен, вы можете захотеть сделать

var tmp = linkedList1.Zip(linkedList2, (first, second) => first + second).ToList(); 
linkedList1.Clear(); 
linkedList1.AddRange (tmp); 
+0

'linkedList1' является' 'LinkedList так что вы не можете использовать' .ToList(); 'Вам нужно что-то вроде:' linkedList1 = new LinkedList (linkedList1.Zip (linkedList2, (first, second) => first + second)); ' –

+0

Почему я не могу использовать' ToList() 'для' списка '???? Я просто попробовал, и я не вижу никаких проблем. Он делает то, что он должен делать. – JohnB

+0

Потому что это не «Список <>», это ['LinkedList <>'] (http://msdn.microsoft.com/en-us/library/he2s3bh7.aspx) –

Смежные вопросы