값이 배열에 있는지 확인 (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;
}
당신은 당신의 방법에서 무언가를 놓치고 있습니다.
public void PrinterSetup(string printer)
{
if (printer == "jupiter")
{
Process.Start("BLAH BLAH CODE TO ADD PRINTER VIA WINDOWS EXEC"");
}
}
추가하기 만하면 string
괜찮을 것입니다.
Note: The question is about arrays of strings. The mentioned routines are not to be mixed with the .Contains method of single strings.
I would like to add an extending answer referring to different C# versions and because of two reasons:
The accepted answer requires Linq which is perfectly idiomatic C# while it does not come without costs, and is not available in C# 2.0 or below. When an array is involved, performance may matter, so there are situations where you want to stay with Array methods.
No answer directly attends to the question where it was asked also to put this in a function (As some answers are also mixing strings with arrays of strings, this is not completely unimportant).
Array.Exists() is a C#/.NET 2.0 method and needs no Linq. Searching in arrays is O(n). For even faster access use HashSet or similar collections.
Since .NET 3.5 there also exists a generic method 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");
}
}
You could write an own extension method (C# 3.0 and above) to add the syntactic sugar to get the same ".Contains" for strings for all arrays without including Linq:
// Using the generic extension method below as requested.
public void PrinterSetup(string[] printer)
{
if (printer.Contains("jupiter"))
{
Process.Start("BLAH BLAH CODE TO ADD PRINTER VIA WINDOWS EXEC");
}
}
public static bool Contains<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));
}
In this case this Contains()
method is used and not the one of Linq.
The elsewhere mentioned .Contains methods refer to List<T>.Contains
(since C# 2.0) or ArrayList.Contains
(since C# 1.1), but not to arrays itself directly.
Not very clear what your issue is, but it sounds like you want something like this:
List<string> printer = new List<string>( new [] { "jupiter", "neptune", "pangea", "mercury", "sonic" } );
if( printer.Exists( p => p.Equals( "jupiter" ) ) )
{
...
}
Consider using HashSet<T>
Class for the sake of lookup performance:
This method is an O(1) operation.
For example:
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");
}
// ...
}
}
I searched now over 2h to find a nicely way how to find duplicates in a list and how to remove them. Here is the simplest answer:
//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();
The Output will look like this: Duplicated Elements will be removed in the new list called distinct!
참고URL : https://stackoverflow.com/questions/13257458/check-if-a-value-is-in-an-array-c
'program story' 카테고리의 다른 글
날짜에 PHP의 날짜 차이? (0) | 2020.09.20 |
---|---|
Java에서 모든 열거 형 값을 얻는 방법은 무엇입니까? (0) | 2020.09.20 |
조건부 서식, 전체 행 기반 (0) | 2020.09.20 |
PHP의 정적 클래스 이니셜 라이저 (0) | 2020.09.20 |
"입력"이벤트에서 백 스페이스 및 del을 감지합니까? (0) | 2020.09.19 |