[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
괜찮을 것입니다.