2012-01-11 7 views
1

특정 조건을 충족하는 목록에서 항목을 제거하고 싶습니다. 나는 지금까지 무엇을 생각해 냈는지 예제를 만들었습니다.목록에서 항목 제거 (.net 2.0)

//remove 1´s and 3´s from list of ints 

List<int> indexes = new List<int>(); 
List<int> ints = new List<int>(); 
ints.Add(1); 
ints.Add(2); 
ints.Add(3); 

foreach (int i in ints) 
{ 
    if(i == 1 || i == 3) 
    indexes.Add(ints.IndexOf(i)); 
} 

indexes.Reverse(); 

foreach (int index in indexes) 
{ 
    ints.RemoveAt(index); 
} 

솔루션을 최적화 할 수 있는지 궁금합니다. 내가 더 잘 내 실제 코드를 게시했다

난을 System.Linq를 사용할 수 없습니다, 난 단지 참조 (비주얼 스튜디오 2005)

UPDATE로 System.Data.Linq 네임 스페이스를 발견했다. 그것은 왜 List<T>.RemoveAll()을 사용하십시오 gridview에

List<int> indexes = new List<int>(); 

foreach (Type type in types) 
{ 
    foreach (DataControlField c in entriesGrid.Columns) 
    { 
      string header = c.HeaderText; 
      if (header == type.Name) 
      { 
       indexes.Add(entriesGrid.Columns.IndexOf(c)); 
      } 
    } 
} 
+1

을 ... 해결책이 좋은 경우에, 당신은 확실히 질문을 유지해야합니다. 그것이 사이트의 요점입니다. –

답변

3

에서 열을 삭제에 관한 것입니다? 그것은 간단 아니라면

ints.RemoveAll(IsOneOrThree); // Remove all 1's or 3's 

private static bool IsOneOrThree(int i) 
{ 
    return i == 1 || i == 3; 
} 

(정말 아니다 추측, 당신은 시도해 볼 수도 있습니다) :

for(int i= ints.Count - 1; i >= 0; i--) 
{ 
    if(ints[i] == 1 || ints[i] == 3) 
     ints.RemoveAt(i); 
} 

이 당신에게 또 다른 목록을 여러 번 반복의 비용을 절약 할 수 있습니다.

+0

맞아, 방금 예를 들어 int를 사용했지만 어쨌든 고마워. – AGuyCalledGerald

+0

@ Jan-Frederik Carl - 하나의 부 루프를 사용하여 두 번째 예제를보고 기준에 맞는 항목을 제거하십시오. –

0

해보십시오에서 removeAll :

또한
ints.RemoveAll((i) => i == 3 || i == 5); 

, 그것은 SO에서 질문을 제거하는 좋은 생각에서, 그래서 일반적으로되지 않습니다 :

public bool MyPredicate(int i){ 
    return i == 3 || i == 5; 
} 

ints.RemoveAll(MyPredicate); 

또는 익명 대의원에 액세스 할 수있는 경우 같은 질문을 가진 미래의 사람들은 이것을 읽고 읽을 수 있습니다. 에서 removeAll에 대한