StringBuilder.Chars[Int32] Özellik
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Bu örnekte belirtilen karakter konumundaki karakteri alır veya ayarlar.
public:
property char default[int] { char get(int index); void set(int index, char value); };
public char this[int index] { get; set; }
member this.Chars(int) : char with get, set
Default Public Property Chars(index As Integer) As Char
Parametreler
- index
- Int32
Karakterin konumu.
Özellik Değeri
Konumundaki indexUnicode karakteri.
Özel durumlar
index bir karakter ayarlanırken bu örneğin sınırlarının dışındadır.
index bir karakter alırken bu örneğin sınırlarının dışındadır.
Açıklamalar
index parametresi içindeki bir karakterin StringBuilderkonumudur. Dizedeki ilk karakter 0 dizinindedir. Dizenin uzunluğu, içerdiği karakter sayısıdır. Bir örneğin son erişilebilir karakteri StringBuilder dizin Length - 1'dir.
Chars[Int32] sınıfının varsayılan özelliğidir StringBuilder . C# dilinde bir dizin oluşturucudur. Bu, bir dizedeki alfabetik, boşluk ve noktalama işaretlerinin sayısını sayan aşağıdaki örnekte gösterildiği gibi özelliğinden Chars[Int32] tek tek karakterlerin alınabileceği anlamına gelir.
using System;
using System.Text;
public class Example
{
public static void Main()
{
int nAlphabeticChars = 0;
int nWhitespace = 0;
int nPunctuation = 0;
StringBuilder sb = new StringBuilder("This is a simple sentence.");
for (int ctr = 0; ctr < sb.Length; ctr++) {
char ch = sb[ctr];
if (Char.IsLetter(ch)) { nAlphabeticChars++; continue; }
if (Char.IsWhiteSpace(ch)) { nWhitespace++; continue; }
if (Char.IsPunctuation(ch)) nPunctuation++;
}
Console.WriteLine("The sentence '{0}' has:", sb);
Console.WriteLine(" Alphabetic characters: {0}", nAlphabeticChars);
Console.WriteLine(" White-space characters: {0}", nWhitespace);
Console.WriteLine(" Punctuation characters: {0}", nPunctuation);
}
}
// The example displays the following output:
// The sentence 'This is a simple sentence.' has:
// Alphabetic characters: 21
// White-space characters: 4
// Punctuation characters: 1
open System
open System.Text
let mutable nAlphabeticChars = 0
let mutable nWhitespace = 0
let mutable nPunctuation = 0
let sb = StringBuilder "This is a simple sentence."
for i = 0 to sb.Length - 1 do
let ch = sb[i]
if Char.IsLetter ch then
nAlphabeticChars <- nAlphabeticChars + 1
elif Char.IsWhiteSpace ch then
nWhitespace <- nWhitespace + 1
elif Char.IsPunctuation ch then
nPunctuation <- nPunctuation + 1
printfn $"The sentence '{sb}' has:"
printfn $" Alphabetic characters: {nAlphabeticChars}"
printfn $" White-space characters: {nWhitespace}"
printfn $" Punctuation characters: {nPunctuation}"
// The example displays the following output:
// The sentence 'This is a simple sentence.' has:
// Alphabetic characters: 21
// White-space characters: 4
// Punctuation characters: 1
Imports System.Text
Module Example
Public Sub Main()
Dim nAlphabeticChars As Integer = 0
Dim nWhitespace As Integer = 0
Dim nPunctuation As Integer = 0
Dim sb As New StringBuilder("This is a simple sentence.")
For ctr As Integer = 0 To sb.Length - 1
Dim ch As Char = sb(ctr)
If Char.IsLetter(ch) Then nAlphabeticChars += 1 : Continue For
If Char.IsWhiteSpace(ch) Then nWhitespace += 1 : Continue For
If Char.IsPunctuation(ch) Then nPunctuation += 1
Next
Console.WriteLine("The sentence '{0}' has:", sb)
Console.WriteLine(" Alphabetic characters: {0}", nAlphabeticChars)
Console.WriteLine(" White-space characters: {0}", nWhitespace)
Console.WriteLine(" Punctuation characters: {0}", nPunctuation)
End Sub
End Module
' The example displays the following output:
' The sentence 'This is a simple sentence.' has:
' Alphabetic characters: 21
' White-space characters: 4
' Punctuation characters: 1
özelliğiyle karakter tabanlı dizin oluşturmanın Chars[] kullanılması aşağıdaki koşullar altında son derece yavaş olabilir:
- Örnek StringBuilder büyük (örneğin, birkaç on binlerce karakterden oluşur).
- "StringBuilder 'parçalı'dır. Başka bir ifadeyle, StringBuilder.Append yöntemlerine yapılan yinelenen çağrılar nesnenin StringBuilder.Capacity özelliğini otomatik olarak genişletmiş ve ona yeni bellek parçaları ayırmıştır."
Her karakter erişimi, doğru arabelleğe erişmek için bağlantılı öbek listesinin tamamını taradığından performans ciddi ölçüde etkilenir.
Note
Büyük bir "öbekli" StringBuilder nesne için bile, bir veya birkaç karaktere dizin tabanlı erişim için Chars[] özelliğinin kullanılması ihmal edilebilir bir performans etkisine sahiptir; genellikle bu, bir O(n) işlemidir. Önemli performans etkisi, nesnedeki StringBuilder karakterleri yinelerken (O (n^2) işlemidir.
Nesnelerle karakter tabanlı dizin oluşturma kullanırken performans sorunlarıyla StringBuilder karşılaşırsanız, aşağıdaki geçici çözümlerden herhangi birini kullanabilirsiniz:
StringBuilder yöntemini çağırarak örneği bir'e String dönüştürünToString, ardından dizedeki karakterlere erişin.
Varolan StringBuilder nesnenin içeriğini önceden boyutlandırılmış StringBuilder yeni bir nesneye kopyalayın. Yeni StringBuilder nesne öbekli olmadığından performans artar. Örneğin:
// sbOriginal is the existing StringBuilder object var sbNew = new StringBuilder(sbOriginal.ToString(), sbOriginal.Length);' sbOriginal is the existing StringBuilder object Dim sbNew = New StringBuilder(sbOriginal.ToString(), sbOriginal.Length)Oluşturucuyu çağırarak nesnenin StringBuilder ilk kapasitesini yaklaşık olarak beklenen en büyük boyutuna eşit bir değere StringBuilder(Int32) ayarlayın. Bunun, en yüksek kapasiteye nadiren ulaşsa StringBuilder bile bellek bloğunun tamamını ayırdığını unutmayın.