SortKey sınıfı

Bu makale, bu API'nin başvuru belgelerine ek açıklamalar sağlar.

İki dizenin kültüre duyarlı karşılaştırması, dizelerdeki her karakterin betik, alfabetik, büyük/küçük harf ve aksan ağırlıkları gibi çeşitli sıralama ağırlıkları kategorisine sahip olmasına bağlıdır. Sıralama anahtarı, belirli bir dize için bu ağırlıkların deposu görevi görür.

yöntemi, CompareInfo.GetSortKey belirtilen dizedeki karakterlerin SortKey kültüre duyarlı eşlemesini yansıtan sınıfın bir örneğini döndürür. Bir SortKey nesnenin değeri, özelliği tarafından KeyData döndürülen anahtar verileridir. Bu anahtar veriler dizeyi kodlayan bir dizi bayt, kültüre özgü sıralama kuralları ve kullanıcı tarafından belirtilen karşılaştırma seçeneklerinden oluşur. Sıralama anahtarlarının kullanıldığı karşılaştırma, her sıralama anahtarındaki ilgili anahtar verilerinin bit düzeyinde karşılaştırmasını oluşturur. Örneğin, değerini CompareOptions.IgnoreCaseiçeren yöntemini çağırarak GetSortKey(String, CompareOptions) bir sıralama anahtarı oluşturursanız, sıralama anahtarını kullanan bir dize karşılaştırma işlemi büyük/küçük harfe duyarlı değildir.

Bir dize için sıralama anahtarı oluşturduktan sonra, statik SortKey.Compare yöntemi çağırarak sıralama anahtarlarını karşılaştırırsınız. Bu yöntem basit bir bayt bayt karşılaştırması gerçekleştirir, bu nedenle veya CompareInfo.Compare yönteminden çok daha String.Compare hızlıdır.

Not

Windows işletim sistemleri için sıralama ve karşılaştırma işlemlerinde kullanılan karakter ağırlıkları, Varsayılan Unicode Harmanlama Öğesi Tablosu, Linux ve macOS için sıralama ağırlığı tablosu hakkında bilgi içeren bir dizi metin dosyası olan Sıralama Ağırlığı Tablolarını indirebilirsiniz.

Performans değerlendirmeleri

Dize karşılaştırması Compare yaparken ve CompareInfo.Compare yöntemleri aynı sonuçları verir, ancak farklı senaryoları hedefler.

Yöntemi, yüksek düzeyde her CompareInfo.Compare dize için sıralama anahtarını oluşturur, karşılaştırmayı gerçekleştirir ve ardından sıralama anahtarını atar ve karşılaştırmanın sonucunu döndürür. Ancak yöntemi aslında CompareInfo.Compare karşılaştırmayı gerçekleştirmek için tam bir sıralama anahtarı oluşturmaz. Bunun yerine yöntemi, her dizedeki her metin öğesi (temel karakter, vekil çifti veya karakter dizisini birleştirme) için anahtar verileri oluşturur. Yöntemi daha sonra ilgili metin öğelerinin anahtar verilerini karşılaştırır. Karşılaştırmanın nihai sonucu belirlendiği anda işlem sonlandırılır. Sıralama anahtarı bilgileri hesaplanır, ancak hiçbir SortKey nesne oluşturulmaz. Bu strateji, her iki dize de bir kez karşılaştırılırsa performans açısından ekonomiktir, ancak aynı dizeler birçok kez karşılaştırılırsa pahalıya dönüşür.

yöntemi, Compare karşılaştırmayı gerçekleştirmeden önce her dize için bir SortKey nesne oluşturulmasını gerektirir. Bu strateji, nesneleri oluşturmak için yatırılan zaman ve bellek nedeniyle ilk karşılaştırma için performans açısından pahalıdır SortKey . Ancak, aynı sıralama anahtarları birçok kez karşılaştırılırsa ekonomik hale gelir.

Örneğin, bir veritabanı tablosunda dize tabanlı dizin sütununun belirtilen bir arama dizesiyle eşleştiği satırı arayan bir uygulama yazdığınızı varsayalım. Tabloda binlerce satır bulunur ve arama dizesini her satırdaki dizinle karşılaştırmak uzun sürer. Bu nedenle, uygulama bir satırı ve dizin sütununu depoladığında, arama performansını geliştirmeye ayrılmış bir sütunda dizinin sıralama anahtarını da oluşturur ve depolar. Uygulama bir hedef satır ararken, arama dizesinin sıralama anahtarını, arama dizesini dizin dizesiyle karşılaştırmak yerine dizin dizesinin sıralama anahtarıyla karşılaştırır.

Güvenlik konuları

yöntemi, CompareInfo.GetSortKey(String, CompareOptions) belirtilen dizeye SortKey ve CompareOptions değere ve temel alınan CompareInfo nesneyle ilişkilendirilmiş kültüre dayalı değere sahip bir nesne döndürür. Bir güvenlik kararı bir dize karşılaştırmasına veya büyük/küçük harf değişikliğine bağlıysa, işletim sisteminin kültür ayarlarından bağımsız olarak işlemin davranışının tutarlı olduğundan emin olmak için sabit kültürün yöntemini kullanmanız CompareInfo.GetSortKey(String, CompareOptions) gerekir.

Sıralama anahtarı almak için aşağıdaki adımları kullanın:

  1. özelliğinden CultureInfo.InvariantCulture sabit kültürü alın.

  2. özelliğinden CultureInfo.CompareInfo sabit kültür için bir CompareInfo nesnesi alın.

  3. yöntemini çağırın CompareInfo.GetSortKey(String, CompareOptions) .

Bir SortKey nesnenin değeriyle çalışmak, windows yöntemini belirtilen LCMAP_SORTKEY değeriyle çağırmaya LCMapString eşdeğerdir. Ancak, nesne için SortKey İngilizce karakterlerin sıralama anahtarları Korece karakterlerin sıralama tuşlarını önceler.

SortKey nesneleri seri hale getirilebilir, ancak yalnızca nesneleri geçebilmeleri AppDomain için. Bir uygulama bir SortKey nesneyi serileştirirse, .NET'in yeni bir sürümü olduğunda uygulamanın tüm sıralama anahtarlarını yeniden oluşturması gerekir.

Sıralama anahtarları hakkında daha fazla bilgi için Unicode Konsorsiyumu web sitesindeki Unicode Teknik Standart #10, "Unicode Harmanlama Algoritması" bölümüne bakın.