리스트에 문자열을 포함하는 요소가 포함되어 있는지 확인하고 해당 요소를 가져옵니다. = myList.ElementAt(myList.IndexOf(myString)); 왜 작동하지 않는지 알고 있습니다. myList.Contains()true목록의

이 질문에 대한 답변을 검색하는 동안 LINQ를 사용하는 비슷한 질문을 겪었지만 익숙하지 않아서 완전히 이해할 수는 없었으므로 구현할 수 없었습니다. 기본적으로 내가 원하는 것은 다음과 같습니다.

  1. 목록의 요소에 특정 문자열이 포함되어 있는지 확인하십시오.
  2. 그렇다면 그 요소를 얻으십시오.

나는 솔직히 내가 그 일을 어떻게 할 것인지 모른다. 내가 생각해 낼 수있는 것은 이것입니다 (물론 작동하지 않습니다).

if (myList.Contains(myString))
    string element = myList.ElementAt(myList.IndexOf(myString));

왜 작동하지 않는지 알고 있습니다.

  • myList.Contains()true목록의 전체 요소가 지정한 문자열과 일치하는지 확인하기 때문에를 반환하지 않습니다 .
  • myList.IndexOf() 다시 발생하는 것처럼 문자열과 일치하는 요소를 검사하므로 발생을 찾지 못합니다.

여전히이 문제를 해결하는 방법에 대한 단서가 없지만 비슷한 질문에서 제안 된대로 LINQ를 사용해야한다고 생각합니다. 즉, 여기에 해당되는 경우 응답자가 LINQ를 예제에서 사용하는 방법을 설명하고 싶습니다. 미리 감사드립니다.

편집 : 나는 해결책을 생각해 냈습니다. 목록을 반복하고 현재 요소에 문자열이 포함되어 있는지 확인한 다음 문자열을 현재 요소와 동일하게 설정하십시오. 그러나 이것보다 더 효율적인 방법이 있는지 궁금합니다.

string myString = "bla";
string element = "";

for (int i = 0; i < myList.Count; i++)
{
    if (myList[i].Contains(myString))
        element = myList[i];
}



답변

Linq를 사용할 수 있어야합니다.

var matchingvalues = myList
    .Where(stringToCheck => stringToCheck.Contains(myString));

첫 번째로 일치하는 항목을 반환하려는 경우 :

var match = myList
    .FirstOrDefault(stringToCheck => stringToCheck.Contains(myString));

if(match != null)
    //Do stuff


답변

기본적인 대답은 다음과 같습니다. 루프를 반복하고 지정된 문자열이 포함 된 요소를 확인해야합니다. 코드가 다음과 같다고 가정 해 봅시다.

foreach(string item in myList)
{
    if(item.Contains(myString))
       return item;
}

동등하지만 간결한 코드는 다음과 같습니다.

mylist.Where(x => x.Contains(myString)).FirstOrDefault();

여기서 x는 위 코드에서 “항목”과 같은 역할을하는 매개 변수입니다.


답변

string result = myList.FirstOrDefault(x => x == myString)
if(result != null)
{
  //found
}


답변

for (int i = 0; i < myList.Length; i++)
{
    if (myList[i].Contains(myString)) // (you use the word "contains". either equals or indexof might be appropriate)
    {
        return i;
    }
}

구식 루프는 거의 항상 가장 빠릅니다.


답변

문자열이 포함 된 문자열 목록을 원하는 경우 :

var newList = myList.Where(x => x.Contains(myString)).ToList();

다른 옵션은 Linq FirstOrDefault를 사용하는 것입니다

var element = myList.Where(x => x.Contains(myString)).FirstOrDefault();

있다는 사실을 숙지 Contains방법은 대소 문자를 구분합니다.


답변

Linq의 FirstOrDefault확장 방법을 사용할 수 있습니다 .

string element = myList.FirstOrDefault(s => s.Contains(myString));

하위 문자열을 포함 myString하거나 null해당 요소가없는 경우 fist 요소를 반환합니다 .

인덱스 만 있으면 List<T>클래스의 FindIndex메서드를 사용하십시오 .

int index = myList.FindIndex(s => s.Contains(myString));

하위 문자열을 포함 myString하거나 -1그러한 요소를 찾을 수없는 경우 fist 요소의 인덱스를 반환합니다 .


답변

여기에 많은 좋은 답변이 있지만 다음과 같이 Exists 사용하는 간단한 답변을 사용 합니다.

foreach (var setting in FullList)
{
    if(cleanList.Exists(x => x.ProcedureName == setting.ProcedureName))
       setting.IsActive = true; // do you business logic here 
    else
       setting.IsActive = false;
    updateList.Add(setting);
}