Heim  >  Artikel  >  Backend-Entwicklung  >  Detailliertes Verständnis der Verwendung von foreach Traversal in C#

Detailliertes Verständnis der Verwendung von foreach Traversal in C#

黄舟
黄舟Original
2017-08-08 10:50:483757Durchsuche

Das Durchlaufen einer Liste über foreach in C# ist eine häufig verwendete Methode und auch praktisch. Der folgende Artikel führt Sie zunächst in die Verwendung von foreach-Durchlauf in C# ein und stellt dann einige Dinge vor, auf die Sie bei der Verwendung achten sollten foreach in C#. Ja, der Artikel stellt es ausführlich anhand von Beispielcode vor, der für alle Freunde, die ihn benötigen, einen gewissen Referenz- und Lernwert hat.

Vorwort

Dieser Artikel führt Sie hauptsächlich in die Verwendung von foreach-Traversal in C# und einige Dinge ein, die Sie über die Verwendung von foreach in C# wissen müssen . Zu Ihrer Information und zum Studium gibt es unten nicht viel zu sagen. Schauen wir uns die ausführliche Einführung an:

1 Verwendung von foreach Traversal in C#

Die foreach-Schleife wird verwendet, um alle Elemente in der Sammlung aufzuzählen. Der Ausdruck in der foreach-Anweisung besteht aus zwei Elementen, die durch das Schlüsselwort in getrennt sind. Das Element auf der rechten Seite von in ist der Sammlungsname und das Element auf der linken Seite von in ist der Variablenname, der zum Speichern jedes Elements in der Sammlung verwendet wird.

Der Ablauf dieser Schleife ist wie folgt: Bei jeder Schleife wird ein neuer Elementwert aus der Menge entnommen. Fügen Sie es in eine schreibgeschützte Variable ein. Wenn der gesamte Ausdruck in den Klammern „true“ zurückgibt, kann die Anweisung im foreach-Block ausgeführt werden. Sobald auf alle Elemente in der Sammlung zugegriffen wurde und der gesamte Ausdruck „falsch“ ergibt, geht die Steuerung zur Ausführungsanweisung über, die dem foreach-Block folgt.

Die foreach-Anweisung wird häufig mit Arrays verwendet. Im folgenden Beispiel wird der Wert des Arrays durch die foreach-Anweisung gelesen und angezeigt.

Attribute des Arrays: Array.Length Kapazität des Arrays

Mit diesem Attribut können wir den Kapazitätswert des Array-Objekts ermitteln Es ist auch einfacher, die Länge und Anzahl der Array-Elemente zu verstehen. Die Verwendung von Attributen ist relativ einfach Erstens sind die anderen Formate grundsätzlich gleich. Wir werden hier keine Beispiele nennen.

Wenn das Array viele Dimensionen und Kapazitäten hat, stellt C# die foreach-Anweisung bereit, die speziell zum Lesen aller Elemente in der Sammlung/im Array verwendet wird. Wir nennen diese Funktion Traversal. Die Syntax lautet wie folgt:

Durchlaufen Sie das Array: foreach (geben Sie objName in Sammlung/Array ein)

Diese Anweisung überprüft alle Elemente im Array werden einzeln gespeichert. Variablenwerte werden gespeichert und einzeln entnommen, wobei Typ der Datentyp des Array-Objekts ist, das Sie lesen möchten und das in der Variablen objName gespeichert wird, und objName ein Variablenname vom Typ ist Der definierte Typ repräsentiert jedes Mal die Elemente aus der Sammlung und dem Array (Sammlung/Array). Sammlung/Array ist das Array-Objekt, auf das zugegriffen werden soll. Auf diese Weise müssen Sie nur foreach schreiben, um Arrays aller Dimensionen außer gezackten Arrays zu durchlaufen.

Hinweis: Der Datentyp von objName muss gleich oder größer als der Typ des Sammlungs-/Array-Objekts sein.

Nachfolgend geben wir ein Beispiel für die Verwendung von foreach und for zum Durchlaufen eines Regelarrays, das eine Methode zum Erhalten der Dimensionen eines Arrays beinhaltet, und vergleichen die Vorteile von foreach beim gleichzeitigen Durchlaufen des Regelarrays .


int[,,] a = new int[2, 2, 2] { {{ 1, 2 }, { 3,4}},{{ 5, 6 }, { 7,8}} };// 定义一个2行2列2纵深的3维数组a
for (int i = 0; i < a.GetLength (0) ;i++ ) //用Array.GetLength(n)得到数组[0,1,,,n]上的维数的元素数,0代表行,1列,n代表此数组是n+1维
{
 for (int j = 0; j < a.GetLength(1); j++)
 {
 for (int z = 0; z < a.GetLength(2);z++ )//2代表得到纵深上的元素数,如果数组有n维就得写n个for循环
 {
 Console.WriteLine(a[i,j,z]);
 }
 }
}

Verwenden Sie eine foreach-Schleife, um ein Array auf einmal zu durchlaufen


int[,,] a = new int[2, 2, 2] { {{ 1, 2 }, { 3,4}},{{ 5, 6 }, { 7,8}} };//定义一个2行2列2纵深的3维数组a
foreach(int i in a)
{
 Console .WriteLine (i);
}

Die Ergebnisse der Ausführung dieser beiden Codes sind gleich. Es gibt ein Element in jeder Zeile, insgesamt 8 Zeilen. Die Elemente sind 1 2 3 4 5 6 7 8

Lassen Sie uns Machen Sie ein weiteres Beispiel für die Verwendung von for- und foreach-Schleifen für den Zugriff auf Array-Elemente. Zuerst wird der Benutzer aufgefordert, die Anzahl der Studenten einzugeben, und dann wird die Anzahl der Studenten als Anzahl der Elemente in den Array-Namen verwendet, in denen die Studenten gespeichert sind Eine for-Schleife wird verwendet, um entsprechend dem Index i des Arrays mit der Schleife zu beginnen und die Eingabeaufforderung „Schülernamen eingeben“ auszugeben, und speichert den vom Benutzer eingegebenen Schülernamen entsprechend seinem Index im Array names[i], und der maximale Wert der Anzahl der for-Schleifen (dh der maximale Wert des Index) wird durch das Array-Attribut .Length erhalten. Wir sagten, die Beziehung zwischen Kapazität und Index sei index=Array.Length-1. Diese Frage ist der maximale Wert von i

Was zu beachten ist: Mit foreach können Sie nur die Elemente abrufen Sie können das Array nacheinander bearbeiten und Sie können diese Anweisung nicht verwenden, um die im Array gespeicherten Elemente zu ändern.



using System;
class Program
{
 static void Main()
 {
 int count;
 Console.WriteLine("输入要登记的学生数");
 count = int.Parse(Console.ReadLine());
 string[]names = new string[count];
 for (int i = 0; i < names.Length; i++)
 {
 Console.WriteLine("请输入第{0}个学生的姓名", i + 1);
 names[i] = Console.ReadLine();
 }
 Console.WriteLine("已登记的学生如下");
 foreach (string name in names)
 {
 Console.WriteLine("{0}", name);
 }
 Console.ReadKey();
 }
}

2. Was Sie über die Verwendung von foreach wissen müssen C#

Das Durchlaufen einer Liste durch foreach ist eine häufig verwendete Methode in C#. Sie ist einfach zu verwenden und die Leistung unterscheidet sich nicht wesentlich von der von for. Schauen wir uns zunächst den folgenden Satz an: Es besteht ein direkter Zusammenhang zwischen der zugewiesenen Speichermenge und der zum Abschließen des Tests erforderlichen Zeit. Wenn wir es alleine betrachten, ist die Speicherzuweisung nicht sehr teuer. Allerdings treten Probleme auf, wenn das Speichersystem nur gelegentlich ungenutzten Speicher bereinigt und die Häufigkeit des Problems proportional zur Menge des zuzuweisenden Speichers ist. Je mehr Speicher Sie also zuweisen, desto häufiger wird der Speicher durch Müll gesammelt und desto schlechter wird die Leistung Ihres Codes.

从上面那些话可以看到内存的回收是非常损耗资源,那我们再看下一些.net内部类型的实现。

Array:


// System.Array

public IEnumerator GetEnumerator()

{

int lowerBound = this.GetLowerBound(0);

if (this.Rank == 1 && lowerBound == 0)

{

return new Array.SZArrayEnumerator(this);

}

return new Array.ArrayEnumerator(this, lowerBound, this.Length);

}

List8742468051c85b06f0a0af9e3e506b5c:


// System.Collections.Generic.List<T>

public List<T>.Enumerator GetEnumerator()

{

return new List<T>.Enumerator(this);

}

Dictionaryb6842da76bed01162354d37c4f2d3464:


// System.Collections.Generic.Dictionary<TKey, TValue>

public Dictionary<TKey, TValue>.Enumerator GetEnumerator()

{

return new Dictionary<TKey, TValue>.Enumerator(this, 2);

}

从以上代码来看,我们再进行foreach操作以上对象的时候都会构建一个Enumerator;也许有人会认为这点东西不需要计较,不过的确很多情况是不用关心;但如果通过内存分析到到的结果表明构建Enumerator的数量排在前几位,那就真的要关心一下了。很简单的一个应用假设你的应用要处理几W的并发,而每次都存在几次foreach那你就能计算出有多少对象的产生和回收?

看下一个简单的分析图,这里紧紧是存在一个List'1如果组件内部每个并发多几个foreach又会怎样?

改成for的结果又怎样呢


总结

Das obige ist der detaillierte Inhalt vonDetailliertes Verständnis der Verwendung von foreach Traversal in C#. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn