2012-06-02 6 views
5

내 List ("listInts")에 많은 int가 들어 있습니다.목록에서 음수 값을 제거하는 방법 <int>?

아무도 놀랄 일이 아닙니다.

내 문제는 내가 거기에 음수를 원하지 않는다는 것입니다. 그러나 3 가지, 특히 -1, -2 및 -3이있을 가능성이 있습니다.

나는 서투르게를 통해 제거 할 수 있습니다 :

if (listInts.Contains(-1) { 
    int i = listInts.IndexOf(-1); 
    listInts.Remove(i); 
    // etc. 
} 

... 그러나 나는이 polecats의 전체 passle보다 코드 냄새 stenchier을 exhudes 알고있다.

더 좋은 방법은 무엇입니까?

답변

8

내가 LINQ를 사용합니다 :

listInts = listInts.Where(i => i >= 0).ToList(); 

이 사용하는 것입니다 방법에 따라, 당신은 또한 ToList() 전화를 방지하고 값을 다시 저장하지 못했습니다 :

var positiveInts = listInts.Where(i => i >= 0); 

이 여전히 할 것 당신은 필요에 따라 열거한다.

당신이 장소의 목록을 변경해야하는 경우, List<T>.RemoveAll 실제로 더 효율적인 방법입니다 :

listInts.RemoveAll(i => i < 0); 

이 부작용을 일으키는 방법, 그리고 혼란 경향이있다 그러나 나는이 선호하지 않는 (따라서 유지 보수가 어려움) 다른 LINQ 확장 방법을 사용하는 경우.

+1

.RemoveAll은 목록 방법으로 구현되고 새 목록을 만드는 대신 목록 자체에서 작업을 수행하기 때문에 더 좋습니다. – SimpleVar

+0

@ YoryeNathan 내가 이것을 왜 좋아 하는지를 포함하여 언급하도록 편집했습니다. RemoveAll –

+0

잘 모르는 것들을 혼란스럽게합니다. 나는 코더들이 코딩을 유지하기 전에 코딩을 알기를 기대한다. 효율성 + 논평 = 승리. – SimpleVar

9
listInts.RemoveAll(t => t < 0) 
관련 문제