값이 배열(C#)에 있는지 확인합니다.
C#의 배열에 값이 있는지 확인하려면 어떻게 해야 합니까?
예를 들어, 프린터 이름 목록이 있는 배열을 만들고 싶습니다.
각 문자열이 배열의 값과 동일한 경우 해당 작업을 수행하는 메소드에 공급됩니다.
예:
string[] printer = {"jupiter", "neptune", "pangea", "mercury", "sonic"};
foreach (p in printer)
{
PrinterSetup(p);
}
프린터 이름입니다. 프린터 설정 메서드에 공급되고 있습니다.
프린터 설정은 다음과 같습니다(일부 유사 코드).
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); // true
Console.WriteLine(b); // false
Console.WriteLine(c); // true
Console.WriteLine(d); // false
더하다using System.Linq;
파일 맨 위에 있습니다.그러면 다음을 수행할 수 있습니다.
if ((new [] {"foo", "bar", "baaz"}).Contains("bar"))
{
}
public static bool Contains(Array a, object val)
{
return Array.IndexOf(a, val) != -1;
}
이런 거?
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"");
}
}
참고: 질문은 문자열 배열에 대한 것입니다.언급된 루틴은 와 혼합해서는 안 됩니다.단일 문자열의 메서드를 포함합니다.
다음 두 가지 이유로 다양한 C# 버전을 참조하는 확장 답변을 추가하고자 합니다.
승인된 답변에는 완벽하게 관용적인 C#인 Linq가 필요하지만 비용이 들지 않으며 C# 2.0 이하에서는 사용할 수 없습니다.어레이가 관련된 경우 성능이 중요할 수 있으므로 어레이 메소드를 계속 사용하려는 경우가 있습니다.
이것을 함수에 넣으라는 질문에도 직접적인 답변은 없습니다(일부 답변은 문자열 배열과 함께 문자열을 혼합하므로 이는 완전히 중요하지 않습니다).
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");
}
}
독자적인 확장 방법(C# 3.0 이상)을 작성하여 구문 당을 추가하여 동일/유사 "를 얻을 수 있습니다.Linq를 포함하지 않는 모든 배열의 문자열에 대해 "포함":
// 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 메서드가 사용되지 않습니다.
언급된 다른 부분.다음과 같은 메서드를 포함합니다.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
괜찮을 거예요.
당신의 문제가 무엇인지 잘 모르지만, 당신은 다음과 같은 것을 원하는 것처럼 들립니다.
List<string> printer = new List<string>( new [] { "jupiter", "neptune", "pangea", "mercury", "sonic" } );
if( printer.Exists( p => p.Equals( "jupiter" ) ) )
{
...
}
조회 성능을 위해 클래스 사용을 고려합니다.
이 메서드는 O(1) 연산입니다.
예:
class PrinterInstaller
{
private static readonly HashSet<string> PrinterNames = new HashSet<string>
{
"jupiter", "neptune", "pangea", "mercury", "sonic"
};
public void Setup(string printerName)
{
if (!PrinterNames.Contains(printerName))
{
throw new ArgumentException("Unknown printer name", "printerName");
}
// ...
}
}
목록에서 중복 항목을 찾는 방법과 제거하는 방법을 찾기 위해 2시간 넘게 검색했습니다.가장 간단한 대답은 다음과 같습니다.
//Copy the string array with the filtered data of the analytics db into an list
// a list should be easier to use
List<string> list_filtered_data = new List<string>(analytics_db_filtered_data);
// Get distinct elements and convert into a list again.
List<string> distinct = list_filtered_data.Distinct().ToList();
출력은 다음과 같습니다.중복된 요소가 구별됨이라고 하는 새 목록에서 제거됩니다!
언급URL : https://stackoverflow.com/questions/13257458/check-if-a-value-is-in-an-array-c
'programing' 카테고리의 다른 글
UIView 애니메이션을 취소하시겠습니까? (0) | 2023.05.08 |
---|---|
목표-C 딜러에게 일반적으로 보유하는 대신 자산을 할당하는 이유는 무엇입니까? (0) | 2023.05.08 |
이전 명령의 인수를 사용하는 방법은 무엇입니까? (0) | 2023.05.08 |
pymongo - 다른 쿼리 매개 변수와 함께 필드에 대한 고유한 값을 가지려면 어떻게 해야 합니까? (0) | 2023.05.08 |
코틀린에서 값으로 배열을 초기화하는 방법은 무엇입니까? (0) | 2023.05.08 |