2016-09-26 3 views
1

Linq를 사용하여 목록에서 마지막으로 발견 된 문자열을 제거 할 수 있습니까? 다음과 같은 내용 :목록에서 마지막으로 나타나는 문자열을 제거하십시오.

var arr = "hello mom hello dad".Split(' ').ToList(); //hello mom hello dad 
arr.RemoveLast(x => x.Contains("hello")); //hello mom dad 

기본적으로 목록의 마지막 항목을 제거하십시오. 문자열에 Contains을 사용해야하며 목록이어야합니다.

+0

'arr'은 배열이 아닌 목록입니다. 또한 실제로는 기존 목록에서 제거하거나 새로운 순서를 만들지 여부에 달려 있습니다. 이는 Linq이 실제로하는 일입니다. – juharr

+0

@juharr 제 잘못,'.ToList()'를 내 예제에 추가하는 것을 잊어 버렸습니다. – MortenMoulder

+0

@DmitryBychenko 마지막 발생. – MortenMoulder

답변

3
list.RemoveAt(list.FindLastIndex(x => x.Contains("hello"))); 

이 위의 그것에 "안녕하세요"를 포함 마지막 문자열을 제거합니다. 문자열 항목 중 어느 것도 검색 조건을 만족하지 가능성, 그리고 아무것도하지 않고해야하는 경우 코드가 발견되면 다시는이처럼 :

int index = list.FindLastIndex(x => x.Contains("hello")); 
if (index != -1) 
    list.RemoveAt(index); 
+0

와우를 사용해야합니다. List에 'FindLastIndex'가 있다는 것을 알지 못했습니다. 감사! – MortenMoulder

+2

목록에있는 값 중 "hello"가없는 경우 예외가 발생합니다. 대신에'FindAct'를 호출하기 전에'FindLastIndex'의 결과를 변수에 할당하고 -1을 검사해야합니다. – juharr

+0

@juharr 항상 IndexOutOfRange 예외가 있는지 확인하십시오. – MortenMoulder

-2

는 여기에 목록을 사용하여 수행하는 방법은 다음과 같습니다

var arr = "hello mom hello dad".Split(' ').ToList(); 
arr.RemoveAt(arr.LastIndexOf("hello")); 
+0

Linq가 아니라 강조하고있다. – MortenMoulder

+0

왜 LINQ가 필요합니까? – ThePerplexedOne

+0

나는 그렇지 않습니다. 또한 Contains와는 작동하지 않습니다. – MortenMoulder

2

다음은 마지막 항목의 인덱스를 확인 할 것 "hello"를 포함하고 있다면 제거하십시오. C# 6 구문을 사용합니다.

var arr = "hello mom hello dad".Split(' ').ToList(); 
var removeIndex = arr.Select((s,i) => new { Value = s, Index = i }) 
        .LastOrDefault(x => x.Value.Contains("hello")) 
        ?.Index; 
if(removeIndex.HasValue) 
    arr.RemoveAt(removeIndex.Value); 
관련 문제