Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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 olarak işlev 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 nesnesinin değeri, KeyData özelliği tarafından döndürülen anahtar verisidir. 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ğeri GetSortKey(String, CompareOptions) olan CompareOptions.IgnoreCase yöntemini çağırarak bir sıralama anahtarı oluşturursanız, bu sıralama anahtarını kullanan bir dize karşılaştırma işlemi büyük/küçük harfe duyarsızdır.
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 String.Compare veya CompareInfo.Compare yöntemine göre çok daha hızlıdır.
Uyarı
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.
Performansla ilgili dikkat edilmesi gerekenler
Dize karşılaştırması yaparken Compare 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 CompareInfo.Compare yöntemi, aslında karşılaştırmayı gerçekleştirmek için tam bir sıralama anahtarı üretmez. 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üvenlikle ilgili dikkat edilmesi gerekenler
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ı olmasını sağlamak için invariant kültürün CompareInfo.GetSortKey(String, CompareOptions) yöntemini kullanmanız gerekir.
Sıralama anahtarı almak için aşağıdaki adımları kullanın:
CultureInfo.InvariantCulture özelliğinden değişmeyen kültürü alın.
CompareInfo özelliğinden değişmez kültür için bir CultureInfo.CompareInfo nesnesi alın.
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, SortKey nesnesi için İngilizce karakterlerin sıralama anahtarları Korece karakterlerin sıralama anahtarlarından önce gelir.
SortKey nesneleri seri hale getirilebilir, ancak yalnızca AppDomain nesnelerini geçebilmek 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.