2011-12-30 5 views
-5

IndexOf은 목록의 마지막 요소에 대해 1을 반환합니다. 왜?
이 코드는 저에게 사용되지 않습니다. 나는 단지 아래에 언급 된 코드를 통해 질문 된 내용에 대해 여러분에게 아이디어를 줄뿐입니다. 예. 목록 :List.IndexOf는 1을 반환합니다. C#

List<int> abc = new List<int>(); 
abc.Add(1); 
abc.Add(2); 
abc.Add(41); 
// i.e index 0 hold 1 index 1 hold 2 and index 3 hold 41 
//abc[0] = 1; 
//abc[1] = 2; 
//abc[3] = 41; 

다음 확인 인덱스와 같은 :

foreach (int i in abc) 
{ 
    //for first two index[0,1] IndexOf() works fine but when foreach loop hole i=41  then IndexOf() returns 1 i.e is index=1 why?? 
    int index = abc.IndexOf(i); 
} 
+5

예제 코드는 컴파일 타임 오류를 일으킬 수 있습니다. 'abc'리스트에는 항목이 없으므로 인덱스로 액세스하면 예외가 발생합니다. – Oded

+0

abc [0] = 1에서 인수 예외가 발생합니다. – Peter

+0

Oded가 말했듯 코드를 포함 시키려면 작업 코드가 항상 좋습니다. 또는 어떤 현상이 발생했는지를 나타내는 최소한의 의사 코드 (예 : "데이터베이스에서 목록에 100 개의 값을 추가하라"는 줄). 주어진 코드가 유효하지 않고 오류를 포함하지 않으면 해당 코드를 찾기가 훨씬 어렵습니다. 문제는 ... – Chris

답변

4

List.IndexOf() 방법은 요소가 발견되면리스트 내의 요소 (항목)의 첫 번째 발생을 반환한다. 목록에 중복 된 요소가 포함되어 있다면 List.IndexOf(item,index)을 사용하여 검색을 계속할 수 있습니다.

var abc = new List<int>(); 
    abc.Add(1); 
    abc.Add(2); 
    abc.Add(41); 
    abc.Add(2); 
    int index=-1; 
    foreach (int i in abc) 
    { 
     index = abc.IndexOf(i,index+1); 
     Console.WriteLine(index); 
    } 
1

IndexOf은 일치하는 항목이 발견되는 첫 번째 인덱스를 반환합니다. 마지막 요소 값이 색인 1에 이미 존재할 가능성이 큽니다. 목록의 모든 값을 다시 확인하십시오.

문제가 지속되면 코드를 게시하여 문제가 다시 발생할 수 있습니다. 게시 한 현재 코드는 그대로 작동하지 않습니다. 예를 들어 코드에 abc[3] = 41과 같은 줄은 목록에 4 개 이상의 요소를 추가하지 않으면 작동하지 않습니다.

4

실제로 사용하는 코드입니까? docs for List.Indexof은 "List<T>에 처음으로 나타나는 값의 0부터 시작하는 인덱스를 반환합니다."라는 말은 목록에 1,2,3,2가 포함되어 있고 마지막 인덱스가 3 일 때를 의미합니다.

(Linqpad에서 실행 가능한) 코드 보여줍니다 다음

var abc =new List<int>(); 
abc.Add(1); 
abc.Add(3); 
abc.Add(42); 
abc.Add(45); 
abc.Add(3); 

foreach(int i in abc) 
{ 
    int index=abc.IndexOf(i).Dump(); 
} 

출력은 다음과 같습니다

0 
1 
2 
3 
1 

참고 : Dump() 개체를 인쇄하는 데 사용되는 유용한 LinqPad 확장 방법이다. 다른 컨텍스트에서이 코드를 실행하려면 제거하고 바꾸십시오.

+0

이 코드는 나에게 사용되지 않습니다. – RollerCosta

+0

그런 다음 마지막 요소가 귀하의 목록에있는 색인 1과 동일한 것입니다. 나는 그것이 아마 ... (또는 당신의 명부에는 단지 2 개의 성분이있다 ;-))다는 것을 의심한다. – Chris

+0

댓글이없는 Downvote? – Chris

1

코드가 작동하지 않습니다. 이 예는 예상되는 답을 줄 것이다.

var abc = new List<int>(4); 
abc.Add(1); 
abc.Add(2); 
abc.Add(3); 
abc.Add(41); 

abc[0] = 1; 
abc[1] = 2; 
abc[3] = 41; 


foreach (int i in abc) 
{ 
    int index = abc.IndexOf(i); 
} 
1


kannas 루프 대신 foreach는 사용. 이렇게하면 IndexOf() 메서드를 피할 수 있습니다.

for(int i =0;i<abc.Count;i++)//use index i 
+0

나는 컴파일되지 않았거나 한 번만 투표 한 코드에 대해 투표를 받았다고 추측합니다 문제를 설명하기 위해 컴파일하도록 편집했습니다. 그리고 이것이 이것이 받아 들인 대답이라면, 질문은 분명히 IndexOf에 관한 것이 아니라 각 루프에 대한 올바른 요소를 참조 할 수 없다는 것입니다. 질문은 확실히 "IndexOf는 목록의 마지막 요소에 대해 1을 반환합니다." 세상에는 "그걸 사용하지 마라"라는 대답이 있어야합니다. 그것은 분명히 자신의 문제를 해결하지만 문제는 아닙니다. – Chris

+1

@Chris Stack overflow 오버 플로우는 사람들이 자신의 질문을 설명하는 예제를 제공하여 우리에게 더 편하게 해주고 예제가 올바른 형식/syntex로 발견되지 않는 곳에서 질문을 던졌습니다. – RollerCosta

+0

코드를 편집하기 전에 가나 사람들이 충분히 똑똑하다고 가정합니다. 이제는 Kannas가 더 나은 프레젠테이션을 위해 코드를 편집했다고 생각합니다. – RollerCosta

관련 문제