2016-07-14 2 views
0

동적으로 변경되는 목록을 반복 할 수있게 해주는 좋은 접근 방식/알고리즘은 무엇입니까?동적으로 변경되는 목록을 루프 오버

  • 이 목록은 중복
  • I는 현재 요소 다음 다음 요소를 필요로 포함 할 수 있습니다. 나는 다음 반복에 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

마지막 줄은 c가 아니고 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' (두번째 요소)로하고, 처음에'z'를 추가하면리스트가 {z, a, b, c, d, e}'이면, nextItem은 세번째 요소가되고,이 경우에는 다시 한번 b가된다. 다른 출력물을 기대하십니까? – Ash

+0

예, 출력은 "c"여야합니다. "b"가 아님 – Krimson

관련 문제