StringBuilder.Chars[Int32] Tulajdonság
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Lekéri vagy beállítja a karaktert a megadott karakterpozícióban ebben a példányban.
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
Paraméterek
- index
- Int32
A karakter pozíciója.
Tulajdonság értéke
A Unicode karakter a pozícióban index.
Kivételek
index karakter beállításakor kívül esik a példány határain.
index a karakter beolvasása közben kívül esik a példány határain.
Megjegyzések
A index paraméter egy karakter pozíciója a StringBuilder. A sztring első karaktere a 0 indexnél van. A karakterlánc hossza a benne szereplő karakterek száma. A példány utolsó akadálymentes karaktere StringBuilder az indexben Length van – 1.
Chars[Int32] az osztály alapértelmezett tulajdonsága StringBuilder . A C#-ban ez egy indexelő. Ez azt jelenti, hogy az egyes karakterek lekérhetők a tulajdonságból az Chars[Int32] alábbi példában látható módon, amely megszámolja a karakterlánc betűrendes, szóköz- és írásjeles karaktereinek számát.
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
A karakteralapú indexelés a tulajdonsággal Chars[] rendkívül lassú lehet a következő feltételek mellett:
- A StringBuilder példány nagy (például több tízezer karakterből áll).
- Az StringBuilder "darabos". Más szóval, az olyan metódusok ismételt hívásai, mint a StringBuilder.Append, automatikusan kibővítették az objektum StringBuilder.Capacity tulajdonságát, és új memóriaegységeket allokáltak hozzá.
A teljesítményre súlyos hatással van, mert minden karakterhozzáférés végigvezeti az adattömbök teljes csatolt listáját, hogy megtalálja a megfelelő puffert az indexeléshez.
Note
Még egy nagy méretű, "masszív" StringBuilder objektum esetén is az Chars[] tulajdonság használata indexalapú eléréshez egy vagy kevés számú karakter esetében elhanyagolható teljesítménybeli hatással jár; rendszerint ez egy O(n) művelet. A jelentős teljesítményhatás az objektum karaktereinek StringBuilder iterálásakor jelentkezik, amely egy O(n^2) művelet.
Ha teljesítményproblémákat tapasztal a karakteralapú indexelés objektumokkal StringBuilder való használatakor, az alábbi megkerülő megoldások bármelyikét használhatja:
A StringBuilder példányt alakítsa át String-é a ToString metódus meghívásával, majd férjen hozzá a karakterekhez a sztringben.
Másolja a meglévő StringBuilder objektum tartalmát egy új előméretű StringBuilder objektumba. A teljesítmény javul, mert az új StringBuilder objektum nem darabos. Például:
// 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)A konstruktor meghívásával állítsa az StringBuilder objektum kezdeti kapacitását olyan értékre, amely körülbelül megegyezik a StringBuilder(Int32) maximálisan várt mérettel. Vegye figyelembe, hogy ez akkor is lefoglalja a teljes memóriablokkot, ha az ritkán éri el a StringBuilder maximális kapacitást.