programing

값이 배열(C#)에 있는지 확인합니다.

powerit 2023. 5. 8. 22:27
반응형

값이 배열(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) 연산입니다.

방법HashSet<T>.Contains(T), MSDN.

예:

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

반응형