2016-07-14 7 views
0

動的に変化するリストをループするための良いアプローチ/アルゴリズムは何でしょうか。動的に変化するリストをループする

  • このリストには、重複
  • を含めることができます私は、現在の要素の後に次の要素が必要です。私は次の反復でa[n]に現在よすなわちあれば、私はa[n]はそれが重複

    では動作しません、
    しかし非常に簡単である現在

私は、この(擬似コード)をやってみましたかかわらずたいです

List<String> list = new List<String>(); 
list.add("a"); 
list.add("b"); 
list.add("c"); 
list.add("d"); 
list.add("e"); 

int currentItem = "a"; 

function nextItem(){ 
    int index = findIndex(currentItem); 
    currentItem = list[index+1]; 
    return currentItem; 
} 

print(nextItem()) #b 
print(nextItem()) #c 
list.addAt(3, "z") #add z at the 3rd index 
print(nextItem()) #z 
print(nextItem()) #d 
print(nextItem()) #e 

私はこの問題にリンクリストを使用することを考えています。あなたは別の解決策を勧めますか、リンクされたリストだけが唯一の方法でしょうか?

編集: 動的に変更すると、whoesコンテンツが 'ループ'の途中、つまりnextItem()呼び出しの中でmoddifiedできることを意味します。単一のスレッドのみを仮定します。

+0

最後の行ではなく、dを返すべきですか?また、 'nextItem()'、 'list [6]'(currentItem = 5以降)が最初に呼び出されたときに、それが存在しないので、エラーを投げる方法を理解していませんか?最初の要素がリストの最後に到達したときに最初の要素にループバックすることを意味しない限り。 – Ash

+0

@Ashwin_Nairはいあなたの権利。私はエラーを修正しました。私はリストが最初に数字で満たされていて、混乱していたので、それを文字に変更しました。また、currentItemはリスト内の要素であり、インデックスではありません – Krimson

+0

もし私があなただったら、currentItemをインデックスを使用するように変更して、重複を心配する必要はありません。私は答えとしてC#の実装を追加します。 – Ash

答えて

0

これはC#の実装です。ループの終わりに達すると、最初に戻ります。これを修正して、最後に例外やその他のアクションをスローすることができます。 あなたの例では、リスト要素をcurrentItemとして使用していますが、それがlistElementであるという事実は、初めて初めてのことです。

List<String> list = new List<String>(); 
    int currentItem = 5; // or InitializeCurrentItem {indexOf(listElementToSearchFor);} 
    static string nextItem() 
    { 
     //Handle case where the end of the loop is reached 
     if (currentItem == list.Count) currentItem = 0; 
     //Ensure current item is updated 
     return list[currentItem++]; 
    } 

    void Main() 
    { 

     list.Add("a"); 
     list.Add("b"); 
     list.Add("c"); 
     list.Add("d"); 
     list.Add("e"); 

     Console.WriteLine(nextItem()); //a 
     Console.WriteLine(nextItem()); //b 
     list.Insert(2, "z"); //add z at the 2nd index 
     Console.WriteLine(nextItem()); //z 
     Console.WriteLine(nextItem()); //c 
     Console.WriteLine(nextItem()); //d 
     Console.WriteLine(nextItem()); //e 
     Console.WriteLine(nextItem()); //a 
} 
+0

currentItemの前に項目を追加すると、これはうまくいかなくなります。例えば、 'list.Insert(0、" z ")' – Krimson

+0

私は分かりません。あなたのリストが '{a、b、c、d、e}'で、 'nextItem'を' b'(2番目の要素)にして、 'z'を先頭に追加して、リスト' {z、 a、b、c、d、e} 'の場合、' nextItem'は3番目の要素になります。この場合はもう一度 'b'です。あなたは他の出力を期待していますか? – Ash

+0

はい、出力は "c"でなければなりません。もう一度 "b"にしないでください – Krimson

関連する問題