[c#] 값이 배열에 있는지 확인 (C #)

값이 C #의 배열에 있는지 어떻게 확인합니까?

마찬가지로 프린터 이름 목록으로 배열을 만들고 싶습니다.

이들은 각 문자열을 차례로 살펴보고 문자열이 배열의 값과 같으면 해당 작업을 수행하는 메서드에 제공됩니다.

예를 들면 :

string[] printer = {"jupiter", "neptune", "pangea", "mercury", "sonic"};
foreach (p in printer)
{
   PrinterSetup(p);     
}

이것은 PrinterSetup 메서드에 공급되는 프린터의 이름입니다.

PrinterSetup은 다음과 같습니다 (일부 의사 코드).

public void PrinterSetup(printer)
{
   if (printer == "jupiter") 
   {
      Process.Start("BLAH BLAH CODE TO ADD PRINTER VIA WINDOWS EXEC");
   }
}

if (printer == "jupiter")C #이 인식 할 수있는 방식으로 서식 을 지정하려면 어떻게해야 합니까?



답변

필요한 네임 스페이스 추가

using System.Linq;

그런 다음 linq Contains()방법을 사용할 수 있습니다.

string[] printer = {"jupiter", "neptune", "pangea", "mercury", "sonic"};
if(printer.Contains("jupiter"))
{
    Process.Start("BLAH BLAH CODE TO ADD PRINTER VIA WINDOWS EXEC"");
}


답변

   string[] array = { "cat", "dot", "perls" };

// Use Array.Exists in different ways.
bool a = Array.Exists(array, element => element == "perls");
bool b = Array.Exists(array, element => element == "python");
bool c = Array.Exists(array, element => element.StartsWith("d"));
bool d = Array.Exists(array, element => element.StartsWith("x"));

// Display bools.
Console.WriteLine(a);
Console.WriteLine(b);
Console.WriteLine(c);
Console.WriteLine(d);
----------------------------output-----------------------------------

1) 참 2) 거짓 3) 참 4) 거짓


답변

if ((new [] {"foo", "bar", "baaz"}).Contains("bar"))
{

}  


답변

이 같은?

string[] printer = {"jupiter", "neptune", "pangea", "mercury", "sonic"};
PrinterSetup(printer);

// redefine PrinterSetup this way:
public void PrinterSetup(string[] printer)
{
    foreach (p in printer.Where(c => c == "jupiter"))
    {
        Process.Start("BLAH BLAH CODE TO ADD PRINTER VIA WINDOWS EXEC"");
    }
}


답변

    public static bool Contains(Array a, object val)
    {
        return Array.IndexOf(a, val) != -1;
    }


답변

참고 : 문제는 문자열 배열에 관한 것입니다. 언급 된 루틴은 단일 문자열의 .Contains 메소드와 혼합되어서는 안됩니다.

다른 C # 버전과 두 가지 이유로 인해 확장 답변을 추가하고 싶습니다.

  • 허용되는 답변에는 비용 없이는 제공되지 않고 C # 2.0 이하에서는 사용할 수 없지만 완벽하게 관용적 인 C # 인 Linq가 필요합니다. 어레이가 관련되면 성능이 중요 할 수 있으므로 Array 메서드를 유지하려는 상황이 있습니다.

  • 이것을 함수에 넣도록 요청받은 질문에 대한 대답은 없습니다 (일부 답변은 문자열과 문자열 배열을 혼합하기 때문에 완전히 중요하지 않습니다).

Array.Exists ()는 C # /. NET 2.0 메서드이며 Linq가 필요하지 않습니다. 배열 검색은 O (n)입니다. 더 빠른 액세스를 위해 HashSet 또는 유사한 컬렉션을 사용하십시오.

.NET 3.5부터는 일반적인 방법도 있습니다 Array<T>.Exists().

public void PrinterSetup(string[] printer)
{
   if (Array.Exists(printer, x => x == "jupiter"))
   {
      Process.Start("BLAH BLAH CODE TO ADD PRINTER VIA WINDOWS EXEC");
   }
}

Linq를 포함하지 않고 모든 배열에 대한 문자열과 동일하거나 유사한 “.Contains”를 얻기 위해 구문 설탕을 추가하는 자체 확장 메서드 (C # 3.0 이상)를 작성할 수 있습니다.

// Using the generic extension method below as requested.
public void PrinterSetup(string[] printer)
{
   if (printer.ArrayContains("jupiter"))
   {
      Process.Start("BLAH BLAH CODE TO ADD PRINTER VIA WINDOWS EXEC");
   }
}

public static bool ArrayContains<T>(this T[] thisArray, T searchElement)
{
   // If you want this to find "null" values, you could change the code here
   return Array.Exists<T>(thisArray, x => x.Equals(searchElement));
}

이 경우 ArrayContains() Linq의 Contains 메서드가 아닌 메서드가 사용됩니다.

다른 곳에서 언급 된 .Contains 메서드는 List<T>.Contains(C # 2.0 ArrayList.Contains이후 ) 또는 (C # 1.1 이후)를 참조하지만 배열 자체는 직접 참조하지 않습니다.


답변

당신은 당신의 방법에서 무언가를 놓치고 있습니다.

public void PrinterSetup(string printer)
{
   if (printer == "jupiter")
   {
      Process.Start("BLAH BLAH CODE TO ADD PRINTER VIA WINDOWS EXEC"");
   }
}

추가하기 만하면 string괜찮을 것입니다.