SortVersion SortVersion SortVersion SortVersion Class

정의

문자열을 비교하고 정렬하는 데 사용되는 유니코드 버전에 대한 정보를 제공합니다.Provides information about the version of Unicode used to compare and order strings.

public ref class SortVersion sealed : IEquatable<System::Globalization::SortVersion ^>
[System.Serializable]
public sealed class SortVersion : IEquatable<System.Globalization.SortVersion>
type SortVersion = class
    interface IEquatable<SortVersion>
Public NotInheritable Class SortVersion
Implements IEquatable(Of SortVersion)
상속
SortVersionSortVersionSortVersionSortVersion
특성
구현

예제

다음 예제에서는 소스 코드를 사용 하는 응용 프로그램의 일부를 포함 합니다 SortVersion 클래스의 기본 이름이 되도록 RegionInfo 개체는 현재 시스템 및 현재 문화권에 대 한 적절 하 게 정렬 됩니다.The following example contains a portion of the source code from an application that uses the SortVersion class to ensure that the native names of RegionInfo objects are ordered appropriately for the current system and current culture. 사용 하 여는 BinaryReader 하 고 BinaryWriter 개체를 저장 및 검색 이라는 데이터 파일에서 데이터를 정렬 Regions.dat 검색 하 고 응용 프로그램이 실행 될 때마다 데이터를 정렬 하는 대신 합니다.It uses the BinaryReader and BinaryWriter objects to store and retrieve ordered data from a data file named Regions.dat rather than retrieving and ordering data each time the application is run. 예제는 데이터 파일의 존재 여부를 확인 하려면 먼저 확인 합니다.The example first checks to determine whether the data file exists. 데이터가 표시 되지 않는 경우 만듭니다 설정 및는 reindex 데이터를 다시 정렬 및 다시 저장 해야 있는지를 나타내는 플래그입니다.If it does not, it creates the data and sets the reindex flag, which indicates that the data must be resorted and saved again. 그렇지 않은 경우 데이터를 검색 하 고는 저장 된 비교 SortVersion 개체는 SortVersion 현재 시스템의 현재 문화권에 대 한 개체입니다.Otherwise, it retrieves the data and compares the saved SortVersion object with the SortVersion object for the current culture on the current system. 서로 다른에 지 아니면 합니다 reindex 이전에 설정 된 플래그를 사용 하는 RegionInfo 데이터.If they are not equal, or if the reindex flag had been set previously, it resorts the RegionInfo data.

using System;
using System.Collections;
using System.Collections.Generic;
using System.Globalization;
using System.IO;
using System.Text;

public class Example : IComparer
{
   private const string FILENAME = @".\Regions.dat";

   private struct Region
   {
      internal Region(string id, string name) 
      {
         this.Id = id;
         this.NativeName = name;
      }
      
      public string Id;
      public string NativeName;
      
      public override string ToString()
      {
         return this.NativeName;
      }
   }

   public static void Main()
   {
      bool reindex = false;
      
      Region[] regions;
      SortVersion ver = null;

      // If the data has not been saved, create it.
      if (! File.Exists(FILENAME)) { 
         regions = GenerateData();
         ver = CultureInfo.CurrentCulture.CompareInfo.Version;  
         reindex = true;
      }
      // Retrieve the existing data.
      else {
         regions = RestoreData(out ver);
      }

      // Determine whether the current ordering is valid; if not, reorder.
      if (reindex || ver != CultureInfo.CurrentCulture.CompareInfo.Version) { 
         Array.Sort(regions, new Example());      
         // Save newly reordered data.
         SaveData(regions);
      }
      
      // Continue with application...
   }

   private static Region[] GenerateData()
   {
      List<Region> regions = new List<Region>();

      foreach (var culture in CultureInfo.GetCultures(CultureTypes.AllCultures)) {
         if (culture.IsNeutralCulture | culture.Equals(CultureInfo.InvariantCulture))
            continue;
            
         RegionInfo region = new RegionInfo(culture.Name);
         regions.Add(new Region(region.Name, region.NativeName));
      }
      return regions.ToArray();
   }

   private static Region[] RestoreData(out SortVersion ver)
   {
      List<Region> regions = new List<Region>();
      
      BinaryReader rdr = new BinaryReader(File.Open(FILENAME, FileMode.Open));
      
      int sortVer = rdr.ReadInt32();
      Guid sortId = Guid.Parse(rdr.ReadString());
      ver = new SortVersion(sortVer, sortId);
      
      string id, name;
      while (rdr.PeekChar() != -1) {
         id = rdr.ReadString();
         name = rdr.ReadString();
         regions.Add(new Region(id, name));      
      }
      return regions.ToArray();
   }

   private static void SaveData(Region[] regions)
   {
      SortVersion ver = CultureInfo.CurrentCulture.CompareInfo.Version;

      BinaryWriter wrtr = new BinaryWriter(File.Open(FILENAME, FileMode.Create));
      wrtr.Write(ver.FullVersion); 
      wrtr.Write(ver.SortId.ToString()); 
      
      foreach (var region in regions) {
         wrtr.Write(region.Id);
         wrtr.Write(region.NativeName);
      }
      wrtr.Close();
   }

   public int Compare(object o1, object o2)
   {
        // Assume that all casts succeed.
        Region r1 = (Region) o1;
        Region r2 = (Region) o2;
        
        return String.Compare(r1.NativeName, r2.NativeName, 
                              StringComparison.CurrentCulture);        
   }
}
Imports System.Collections
Imports System.Collections.Generic
Imports System.Globalization
Imports System.IO
Imports System.Text

Public Class Example : Implements IComparer
   Private Const FILENAME As String = ".\Regions.dat"
   
   Private Structure Region
      Friend Sub New(id As String, name As String)
         Me.Id = id
         Me.NativeName = name
      End Sub
      
      Dim Id As String
      Dim NativeName As String
      
      Public Overrides Function ToString() As String
         Return Me.NativeName
      End Function
   End Structure
   
   Public Shared Sub Main()
      Dim reindex As Boolean = False
      
      Dim regions() As Region
      Dim ver As SortVersion = Nothing

      ' If the data has not been saved, create it.
      If Not File.Exists(FILENAME) Then 
         regions = GenerateData()
         ver = CultureInfo.CurrentCulture.CompareInfo.Version  
         reindex = True
      ' Retrieve the existing data.
      Else
         regions = RestoreData(ver)
      End If

      ' Determine whether the current ordering is valid; if not, reorder.
      If reindex OrElse ver <> CultureInfo.CurrentCulture.CompareInfo.Version Then 
         Array.Sort(regions, New Example())      
         ' Save newly reordered data.
         SaveData(regions)
      End If
      
      ' Continue with application...
   End Sub

   Private Shared Function GenerateData() As Region()
      Dim regions As New List(Of Region)()

      For Each culture In CultureInfo.GetCultures(CultureTypes.AllCultures)
         If culture.IsNeutralCulture Or culture.Equals(CultureInfo.InvariantCulture) Then Continue For
            
         Dim region As New RegionInfo(culture.Name)
         regions.Add(New Region(region.Name, region.NativeName))
      Next
      Return regions.ToArray()
   End Function
   
   Private Shared Function RestoreData(ByRef ver As SortVersion) As Region()
      Dim regions As New List(Of Region)
      
      Dim rdr As New BinaryReader(File.Open(FILENAME, FileMode.Open))
      
      Dim sortVer As Integer = rdr.ReadInt32
      Dim sortId As Guid = Guid.Parse(rdr.ReadString())
      ver = New SortVersion(sortVer, sortId)
      
      Dim id As String, name As String
      Do While rdr.PeekChar <> -1
         id = rdr.ReadString()
         name = rdr.ReadString()
         regions.Add(New Region(id, name))      
      Loop
      Return regions.ToArray()
   End Function
   
   Private Shared Sub SaveData(regions As Region())
      Dim ver As SortVersion = CultureInfo.CurrentCulture.CompareInfo.Version

      Dim wrtr As New BinaryWriter(File.Open(FILENAME, FileMode.Create))
      wrtr.Write(ver.FullVersion) 
      wrtr.Write(ver.SortId.ToString()) 
      
      For Each region In regions
         wrtr.Write(region.Id)
         wrtr.Write(region.NativeName)
      Next
      wrtr.Close()
   End Sub

   Private Function SortByNativeName(o1 As Object, o2 As Object) As Integer _
           Implements IComparer.Compare
        ' Assume that all conversions succeed.
        Dim r1 As Region = CType(o1, Region)
        Dim r2 As Region = CType(o2, Region)
        
        Return String.Compare(r1.NativeName, r2.NativeName, 
                              StringComparison.CurrentCulture)         
   End Function
End Class

설명

.NET Framework의 정렬 및 문자열 비교Sorting and string comparison in the .NET Framework

.NET Framework 2.0 서비스 팩 1.NET Framework 2.0 Service Pack 1 를 통해를 .NET Framework 4.NET Framework 4,.net Framework의 각 버전 정렬 가중치를 포함 하는 테이블에 포함 된 및 문자열 정규화에 대 한 데이터를 특정 유니코드 버전에 기반한 합니다.From the .NET Framework 2.0 서비스 팩 1.NET Framework 2.0 Service Pack 1 through the .NET Framework 4.NET Framework 4, each version of the.NET Framework has included tables that contain sort weights and data on string normalization and that are based on a particular version of Unicode. .NET Framework 4.5.NET Framework 4.5, 운영 체제에 이러한 테이블의 존재에 따라 달라 집니다.In the .NET Framework 4.5.NET Framework 4.5, the presence of these tables depends on the operating system:

  • Windows 7Windows 7 이전 버전의 Windows 운영 체제, 문자열 정렬 및 비교에 사용할 테이블을 계속 합니다.On Windows 7Windows 7 and previous versions of the Windows operating system, the tables continue to be used for comparing and ordering strings.

  • Windows 8Windows 8,.NET Framework는 문자열 비교 및 정렬 작업 운영 체제에 위임 합니다.On Windows 8Windows 8, the .NET Framework delegates string comparison and ordering operations to the operating system.

결과적으로 문자열 비교의 결과 다음 표와 같이.NET Framework 버전에서 뿐만 아니라 운영 체제 버전에서 달라질 수 있습니다.Consequently, the result of a string comparison can depend not only on the .NET Framework version, but also on the operating system version, as the following table shows. 지원되는 유니코드 버전 목록은 문자 비교 및 정렬에만 적용되며 범주에 따른 유니코드 문자의 분류에는 적용되지 않습니다.Note that this list of supported Unicode versions applies to character comparison and sorting only; it does not apply to classification of Unicode characters by category.

.NET Framework 버전.NET Framework version 운영 체제Operating system 유니코드 버전Unicode version
.NET Framework 4.NET Framework 4 모든 운영 체제All operating systems Unicode 5.0Unicode 5.0
.NET Framework 4.5.NET Framework 4.5 이상 버전의.NET Frameworkand later versions of the .NET Framework Windows 7Windows 7 Unicode 5.0Unicode 5.0
.NET Framework 4.5.NET Framework 4.5 이상 버전의.NET Frameworkand later versions of the .NET Framework Windows 8Windows 8 및 이후 Windows 운영 체제 버전and later Windows operating system versions Unicode 6.0Unicode 6.0

Windows 8Windows 8이므로 문자열 비교에 사용 되는 유니코드 버전 및 운영 체제의 버전에 따라 달라 집니다 순서, 문자열 비교의 결과 특정 버전의.NET Framework에서 실행 되는 응용 프로그램에 대해서도 다를 수 있습니다.On Windows 8Windows 8, because the version of Unicode used in string comparison and ordering depends on the version of the operating system, the results of string comparison may differ even for applications that run on a specific version of the .NET Framework.

.NET Core에서 정렬 및 문자열 비교Sorting and string comparison in .NET Core

문자열 비교를 수행 하는 경우 모든 버전의.NET Core는 기본 운영 체제에 의존 합니다.All versions of .NET Core rely on the underlying operating system when performing string comparisons. 따라서 결과 문자열 비교 또는 문자열 정렬 되는 순서 비교를 수행할 때 운영 체제에서 사용 하는 유니코드 버전에 따라 달라 집니다.Therefore, the results of a string comparison or the order in which strings are sorted depends on the version of Unicode used by the operating system when performing the comparison. Linux 및 macOS 유니코드에 대 한 국제 구성 요소 라이브러리 Api를 정렬 및 비교에 대 한 구현을 제공 합니다.On Linux and macOS, International Components for Unicode libraries provide the implementation for comparison and sorting APIs.

SortVersion 클래스 사용Using the SortVersion class

SortVersion 클래스는 문자열 비교 및 정렬에 대 한.NET에서 사용 되는 유니코드 버전에 대 한 정보를 제공 합니다.The SortVersion class provides information about the Unicode version used by .NET for string comparison and ordering. 개발자가 검색 하 고 응용 프로그램의 문자열 비교 및 정렬에 사용 되는 유니코드 버전의 변경 내용을 성공적으로 처리할 수 있는 응용 프로그램을 작성할 수 있습니다.It enables developers to write applications that can detect and successfully handle changes in the version of Unicode that is used to compare and sort an application's strings.

인스턴스화할 수 있습니다는 SortVersion 두 가지 방법으로 개체:You can instantiate a SortVersion object in two ways:

  • 호출 하 여 합니다 SortVersion 새를 인스턴스화하는 생성자 SortVersion 버전 번호를 기반으로 개체 및 정렬 id입니다.By calling the SortVersion constructor, which instantiates a new SortVersion object based on a version number and sort ID. 다시 만들 때이 생성자는 가장 유용한를 SortVersion 저장 된 데이터 개체입니다.This constructor is most useful when recreating a SortVersion object from saved data.

  • 값을 검색 하 여 CompareInfo.Version 속성입니다.By retrieving the value of the CompareInfo.Version property. 이 속성은 응용 프로그램이 실행 되는.NET 구현에서 사용 되는 유니코드 버전에 대 한 정보를 제공 합니다.This property provides information about the Unicode version used by the .NET implementation on which the application is running.

SortVersion 클래스에는 두 개의 속성인 FullVersionSortId, 유니코드 버전 및 문자열 비교에 사용 되는 특정 문화권을 나타내는입니다.The SortVersion class has two properties, FullVersion and SortId, that indicate the Unicode version and the specific culture used for string comparison. 합니다 FullVersion 속성이 문자열 비교에 사용 되는 유니코드 버전을 반영 하는 임의 숫자 값 및 SortId 속성은 임의의 Guid 반영 하는 규칙이 포함 된 문자열 비교에 사용 된 culture입니다.The FullVersion property is an arbitrary numeric value that reflects the Unicode version used for string comparison, and the SortId property is an arbitrary Guid that reflects the culture whose conventions are used for string comparison. 두 개를 비교 하는 경우에 이러한 두 속성의 값은 중요 한 SortVersion 사용 하 여 개체를 Equals 메서드를 Equality 연산자 또는 Inequality 연산자입니다.The values of these two properties are important only when you compare two SortVersion objects by using the Equals method, the Equality operator, or the Inequality operator.

일반적으로 사용 하는 SortVersion 개체 자체를 저장 하거나 인덱스 또는 리터럴와 같은 문자열 데이터를 정렬 일종의 문화권 구분 검색 문자열입니다.You typically use a SortVersion object when saving or retrieving some form of culture-sensitive, ordered string data, such as indexes or the literal strings themselves. 이 경우 다음 단계를 수행해야 합니다.This requires the following steps:

  1. 순서가 지정 된 문자열 데이터를 저장 합니다 FullVersionSortId 속성 값도 저장 됩니다.When the ordered string data is saved, the FullVersion and SortId property values are also saved.

  2. 순서가 지정 된 문자열 데이터를 검색할 때 다시 만들 수 있습니다 합니다 SortVersion 를 호출 하 여 문자열 순서 지정에 사용 되는 개체는 SortVersion 생성자입니다.When the ordered string data is retrieved, you can recreate the SortVersion object used for ordering the strings by calling the SortVersion constructor.

  3. 이 새로 인스턴스화된 SortVersion 개체와 비교 됩니다는 SortVersion 규칙이 포함은 문자열 데이터를 정렬 하는 데 사용 되는 문화권을 반영 하는 개체입니다.This newly instantiated SortVersion object is compared with a SortVersion object that reflects the culture whose conventions are used to order the string data.

  4. 하는 경우 두 SortVersion 개체가 같지 않은지, 문자열 데이터를 다시 정렬 해야 합니다.If the two SortVersion objects are not equal, the string data must be reordered.

예제에서는 그림을 제공합니다.The example provides an illustration.

생성자

SortVersion(Int32, Guid) SortVersion(Int32, Guid) SortVersion(Int32, Guid) SortVersion(Int32, Guid)

SortVersion 클래스의 새 인스턴스를 만듭니다.Creates a new instance of the SortVersion class.

속성

FullVersion FullVersion FullVersion FullVersion

SortVersion 개체의 전체 버전 번호를 가져옵니다.Gets the full version number of the SortVersion object.

SortId SortId SortId SortId

SortVersion 개체에 대한 전역적으로 고유한 식별자를 가져옵니다.Gets a globally unique identifier for this SortVersion object.

메서드

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

SortVersion 인스턴스가 지정된 개체와 같은지 여부를 나타내는 값을 반환합니다.Returns a value that indicates whether this SortVersion instance is equal to a specified object.

Equals(SortVersion) Equals(SortVersion) Equals(SortVersion) Equals(SortVersion)

SortVersion 인스턴스가 지정된 SortVersion 개체와 같은지 여부를 나타내는 값을 반환합니다.Returns a value that indicates whether this SortVersion instance is equal to a specified SortVersion object.

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

이 인스턴스의 해시 코드를 반환합니다.Returns a hash code for this instance.

GetType() GetType() GetType() GetType()

현재 인스턴스의 Type을 가져옵니다.Gets the Type of the current instance.

(Inherited from Object)
MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

현재 Object의 단순 복사본을 만듭니다.Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

현재 개체를 나타내는 문자열을 반환합니다.Returns a string that represents the current object.

(Inherited from Object)

연산자

Equality(SortVersion, SortVersion) Equality(SortVersion, SortVersion) Equality(SortVersion, SortVersion) Equality(SortVersion, SortVersion)

두 개의 SortVersion 인스턴스가 같은지 여부를 나타냅니다.Indicates whether two SortVersion instances are equal.

Inequality(SortVersion, SortVersion) Inequality(SortVersion, SortVersion) Inequality(SortVersion, SortVersion) Inequality(SortVersion, SortVersion)

두 개의 SortVersion 인스턴스가 같지 않은지 여부를 나타냅니다.Indicates whether two SortVersion instances are not equal.

적용 대상

추가 정보