CompareOptions 열거형

정의

CompareInfo와 함께 사용할 문자열 비교 옵션을 정의합니다.

이 열거형은 멤버 값의 비트 조합을 지원합니다.

public enum class CompareOptions
[System.Flags]
public enum CompareOptions
[System.Flags]
[System.Serializable]
public enum CompareOptions
[System.Flags]
[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public enum CompareOptions
[<System.Flags>]
type CompareOptions = 
[<System.Flags>]
[<System.Serializable>]
type CompareOptions = 
[<System.Flags>]
[<System.Serializable>]
[<System.Runtime.InteropServices.ComVisible(true)>]
type CompareOptions = 
Public Enum CompareOptions
상속
CompareOptions
특성

필드

IgnoreCase 1

이 문자열 비교 옵션은 대/소문자를 무시함을 나타냅니다.

IgnoreKanaType 8

이 문자열 비교 옵션은 일본어 가나 형식을 무시함을 나타냅니다. 가나 형식은 일본어의 발성음을 표현하는 히라가나 문자와 가타카나 문자를 나타냅니다. 히라가나는 일본 고유의 어구과 단어를 표현하는 데 사용되고, 가타카나는 "컴퓨터"나 "인터넷" 등과 같은 외래어를 표현하는 데 사용됩니다. 발성음은 히라가나와 가타카나 모두로 표현할 수 있습니다. 이 값이 선택되어 있으면 하나의 발성음에 대해 히라가나 문자와 가타카나 문자가 같은 것으로 간주됩니다.

IgnoreNonSpace 2

분음 부호와 같이 공백 없는 조합 문자를 무시하는 문자열 비교를 나타냅니다. 유니코드 표준(Unicode Standard)에서 조합 문자는 기본 문자와 조합하여 새 문자를 만들어내는 문자로 정의됩니다. 간격이 없는 조합 문자는 렌더링될 때 스스로 공간을 차지하지 않습니다.

IgnoreSymbols 4

이 문자열 비교 옵션은 공백 문자, 문장 부호, 통화 기호, 백분율 기호, 수학 기호, 앰퍼샌드 등의 기호를 무시함을 나타냅니다.

IgnoreWidth 16

이 문자열 비교 옵션은 문자 너비를 무시함을 나타냅니다. 예를 들어 일본어의 가타카나 문자는 전자나 반자로 쓸 수 있는데, 이 값이 선택되어 있으면 전자로 쓰여진 가타카나 문자와 반자로 쓰여진 가타카나 문자가 같은 것으로 간주됩니다.

None 0

문자열 비교를 위한 기본 옵션 설정을 나타냅니다.

Ordinal 1073741824

문자열 비교가 문자열의 후속 유니코드 UTF-16 인코딩 값을 사용해야 함을 나타냅니다(코드 단위별 코드 단위 비교). 이 값을 사용하면 문자열을 빠르게 비교할 수 있지만 문화권을 구분할 수는 없습니다. XXXX16이 YYYY16보다 작은 경우 코드 단위 XXXX16으로 시작하는 문자열이 YYYY16으로 시작하는 문자열 앞에 옵니다. 이 값은 다른 CompareOptions 값과 함께 사용할 수 없으며 단독으로 사용해야 합니다.

OrdinalIgnoreCase 268435456

문자열 비교에서는 대/소문자를 무시하고 서수 비교를 수행해야 합니다. 이 기술은 고정 문화권을 사용하여 문자열을 대문자로 변환한 다음 해당 결과에 대해 서수 비교를 수행하는 것과 같습니다.

StringSort 536870912

이 문자열 비교 옵션은 문자열 정렬 알고리즘을 사용해야 함을 나타냅니다. 문자열 정렬에서 하이픈, 아포스트로피, 비영숫자 기호 등이 영숫자 문자 앞에 옵니다.

예제

다음 코드 예제에서는 StringSort를 사용하여 정렬하는 것이 StringSort 없이 정렬하는 것과 어떻게 다른지 보여 줍니다.

using namespace System;
using namespace System::Collections;
using namespace System::Globalization;

// __gc public class SamplesCompareOptions {
ref class MyStringComparer: public IComparer
{
public:

   // Constructs a comparer using the specified CompareOptions.
   CompareInfo^ myComp;
   CompareOptions myOptions;
   MyStringComparer( CompareInfo^ cmpi, CompareOptions options )
      : myComp( cmpi ), myOptions( options )
   {}

   // Compares strings with the CompareOptions specified in the constructor.
   virtual int Compare( Object^ a, Object^ b )
   {
      if ( a == b )
            return 0;

      if ( a == nullptr )
            return  -1;

      if ( b == nullptr )
            return 1;

      String^ sa = dynamic_cast<String^>(a);
      String^ sb = dynamic_cast<String^>(b);
      if ( sa != nullptr && sb != nullptr )
            return myComp->Compare( sa, sb, myOptions );

      throw gcnew ArgumentException( "a and b should be strings." );
   }
};

int main()
{
   
   // Creates and initializes an array of strings to sort.
   array<String^>^myArr = {"cant","bill's","coop","cannot","billet","can't","con","bills","co-op"};
   Console::WriteLine( "\nInitially, " );
   IEnumerator^ myEnum = myArr->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      String^ myStr = safe_cast<String^>(myEnum->Current);
      Console::WriteLine( myStr );
   }

   
   // Creates and initializes a Comparer to use.
   //CultureInfo* myCI = new CultureInfo(S"en-US", false);
   MyStringComparer^ myComp = gcnew MyStringComparer( CompareInfo::GetCompareInfo( "en-US" ),CompareOptions::None );
   
   // Sorts the array without StringSort.
   Array::Sort( myArr, myComp );
   Console::WriteLine( "\nAfter sorting without CompareOptions::StringSort:" );
   myEnum = myArr->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      String^ myStr = safe_cast<String^>(myEnum->Current);
      Console::WriteLine( myStr );
   }

   
   // Sorts the array with StringSort.
   myComp = gcnew MyStringComparer( CompareInfo::GetCompareInfo( "en-US" ),CompareOptions::StringSort );
   Array::Sort( myArr, myComp );
   Console::WriteLine( "\nAfter sorting with CompareOptions::StringSort:" );
   myEnum = myArr->GetEnumerator();
   while ( myEnum->MoveNext() )
   {
      String^ myStr = safe_cast<String^>(myEnum->Current);
      Console::WriteLine( myStr );
   }
}

/*
This code produces the following output.

Initially,
cant
bill's
coop
cannot
billet
can't
con
bills
co-op

After sorting without CompareOptions::StringSort:
billet
bills
bill's
cannot
cant
can't
con
coop
co-op

After sorting with CompareOptions::StringSort:
bill's
billet
bills
can't
cannot
cant
co-op
con
coop
*/
using System;
using System.Collections;
using System.Globalization;

public class SamplesCompareOptions  {

   private class MyStringComparer: IComparer {
      private CompareInfo myComp;
      private CompareOptions myOptions = CompareOptions.None;

      // Constructs a comparer using the specified CompareOptions.
      public MyStringComparer( CompareInfo cmpi, CompareOptions options )  {
         myComp = cmpi;
         this.myOptions = options;
      }

      // Compares strings with the CompareOptions specified in the constructor.
      public int Compare(Object a, Object b) {
         if (a == b) return 0;
         if (a == null) return -1;
         if (b == null) return 1;

         String sa = a as String;
         String sb = b as String;
         if (sa != null && sb != null)
            return myComp.Compare(sa, sb, myOptions);
         throw new ArgumentException("a and b should be strings.");
      }
   }

   public static void Main()  {

      // Creates and initializes an array of strings to sort.
      String[] myArr = new String[9] { "cant", "bill's", "coop", "cannot", "billet", "can't", "con", "bills", "co-op" };
      Console.WriteLine( "\nInitially," );
      foreach ( String myStr in myArr )
         Console.WriteLine( myStr );

      // Creates and initializes a Comparer to use.
      //CultureInfo myCI = new CultureInfo( "en-US", false );
      MyStringComparer myComp = new MyStringComparer(CompareInfo.GetCompareInfo("en-US"), CompareOptions.None);

      // Sorts the array without StringSort.
      Array.Sort( myArr, myComp );
      Console.WriteLine( "\nAfter sorting without CompareOptions.StringSort:" );
      foreach ( String myStr in myArr )
         Console.WriteLine( myStr );

      // Sorts the array with StringSort.
      myComp = new MyStringComparer(CompareInfo.GetCompareInfo("en-US"), CompareOptions.StringSort);
      Array.Sort( myArr, myComp );
      Console.WriteLine( "\nAfter sorting with CompareOptions.StringSort:" );
      foreach ( String myStr in myArr )
         Console.WriteLine( myStr );
   }
}

/*
This code produces the following output.

Initially,
cant
bill's
coop
cannot
billet
can't
con
bills
co-op

After sorting without CompareOptions.StringSort:
billet
bills
bill's
cannot
cant
can't
con
coop
co-op

After sorting with CompareOptions.StringSort:
bill's
billet
bills
can't
cannot
cant
co-op
con
coop

*/
Imports System.Collections
Imports System.Globalization

Public Class SamplesCompareOptions

   Private Class MyStringComparer
      Implements IComparer

      Private myComp As CompareInfo
      Private myOptions As CompareOptions = CompareOptions.None
      
      ' Constructs a comparer using the specified CompareOptions.
      Public Sub New(cmpi As CompareInfo, options As CompareOptions)
         myComp = cmpi
         Me.myOptions = options
      End Sub
      
      ' Compares strings with the CompareOptions specified in the constructor.
      Public Function Compare(a As [Object], b As [Object]) As Integer Implements IComparer.Compare
         If a = b Then
            Return 0
         End If
         If a Is Nothing Then
            Return - 1
         End If
         If b Is Nothing Then
            Return 1
         End If 

         Dim sa As [String] = a
         Dim sb As [String] = b
         If Not (sa Is Nothing) And Not (sb Is Nothing) Then
            Return myComp.Compare(sa, sb, myOptions)
         End If
         Throw New ArgumentException("a and b should be strings.")

      End Function 'Compare 

   End Class


   Public Shared Sub Main()
      
      ' Creates and initializes an array of strings to sort.
      Dim myArr() As [String] = {"cant", "bill's", "coop", "cannot", "billet", "can't", "con", "bills", "co-op"}
      Console.WriteLine()
      Console.WriteLine("Initially,")
      Dim myStr As [String]
      For Each myStr In  myArr
         Console.WriteLine(myStr)
      Next myStr 

      ' Creates and initializes a Comparer to use.
      'CultureInfo myCI = new CultureInfo( "en-US", false );
      Dim myComp As New MyStringComparer(CompareInfo.GetCompareInfo("en-US"), CompareOptions.None)
      
      ' Sorts the array without StringSort.
      Array.Sort(myArr, myComp)
      Console.WriteLine()
      Console.WriteLine("After sorting without CompareOptions.StringSort:")
      For Each myStr In  myArr
         Console.WriteLine(myStr)
      Next myStr 

      ' Sorts the array with StringSort.
      myComp = New MyStringComparer(CompareInfo.GetCompareInfo("en-US"), CompareOptions.StringSort)
      Array.Sort(myArr, myComp)
      Console.WriteLine()
      Console.WriteLine("After sorting with CompareOptions.StringSort:")
      For Each myStr In  myArr
         Console.WriteLine(myStr)
      Next myStr 

   End Sub

End Class


'This code produces the following output.
'
'Initially,
'cant
'bill's
'coop
'cannot
'billet
'can't
'con
'bills
'co-op
'
'After sorting without CompareOptions.StringSort:
'billet
'bills
'bill's
'cannot
'cant
'can't
'con
'coop
'co-op
'
'After sorting with CompareOptions.StringSort:
'bill's
'billet
'bills
'can't
'cannot
'cant
'co-op
'con
'coop

설명

이러한 옵션은 대/소문자 구분 또는 문자 형식을 무시해야 하는 필요성을 나타냅니다.

.NET은 단어 정렬, 문자열 정렬 및 서수 정렬의 세 가지 고유한 정렬 방법을 사용합니다. Word 정렬은 문자열의 문화권 구분 비교를 수행합니다. 특정 무수 문자에는 특수 가중치가 할당되어 있을 수 있습니다. 예를 들어 하이픈("-")에는 매우 작은 가중치가 할당되어 정렬된 목록에서 "coop" 및 "co-op"이 나란히 표시될 수 있습니다. 문자열 정렬은 특수한 경우가 없다는 점을 제외하고 단어 정렬과 비슷합니다. 따라서 모든 영숫자가 아닌 기호는 모든 영숫자 문자 앞에 옵니다. 서수 정렬은 문자열의 각 요소에 대한 유니코드 값을 기준으로 문자열을 비교합니다. Windows 운영 체제의 정렬 및 비교 작업에 사용되는 문자 가중치에 대한 정보가 포함된 다운로드 가능한 텍스트 파일 집합은 가중치 테이블 정렬을 참조하세요. Linux 및 macOS에 대한 정렬 가중치 테이블은 기본 유니코드 데이터 정렬 요소 테이블을 참조하세요. Linux 및 macOS에서 정렬 가중치 테이블의 특정 버전은 시스템에 설치된 International Components for Unicode 라이브러리 버전에 따라 달라집니다. ICU 버전 및 ICU 버전이 구현하는 유니코드 버전에 대한 자세한 내용은 ICU 다운로드를 참조하세요.

값은 StringSortCompareInfo.GetSortKey에서 CompareInfo.Compare 만 사용할 수 있습니다. ArgumentExceptionStringSort 값이 , , CompareInfo.IsSuffixCompareInfo.IndexOf또는 CompareInfo.LastIndexOf와 함께 CompareInfo.IsPrefix사용되는 경우 throw됩니다.

참고

가능하면 값을 허용하는 문자열 비교 메서드를 CompareOptions 사용하여 예상되는 비교 종류를 지정해야 합니다. 일반적으로 사용자 지향 비교는 언어 옵션(현재 문화권 사용)을 사용하는 것이 가장 좋은 반면 보안 비교는 또는 OrdinalIgnoreCase를 지정 Ordinal 해야 합니다.

문화권 구분 정렬에 대한 참고 사항

참고

Linux 및 macOS 시스템에서만 실행되는 .NET Core: C 및 Posix 문화권에 대한 데이터 정렬 동작은 항상 대/소문자를 구분합니다. 이러한 문화권은 예상되는 유니코드 데이터 정렬 순서를 사용하지 않기 때문입니다. C 또는 Posix 이외의 문화권을 사용하여 문화권 구분, 대/소문자 비구분 정렬 작업을 수행하는 것이 좋습니다.

적용 대상

추가 정보