2017-02-20 1 views
1

Aus irgendeinem Grund, wenn ich die umgekehrte Methode anwende, ändert sich nichts.Wie Sie ein Array mit der Reverse-Methode umkehren. C#

public static string ReverseString(string word) 
    { 
     char[] myArray = word.ToCharArray(); 
     myArray.Reverse(); 

     string ans = string.Join("", myArray); 

     return ans; 
    } 
+2

'myArray = myArray.Reverse();' – Gusman

+2

I t gibt ein neues Array zurück, es ändert nicht das Original –

+0

Verwenden Sie Array.Reverse(), um In-Place- –

Antwort

0

Versuchen Sie Array.Reverse(myArray) anstelle von myArray.Reverse().

Sie sind verwirrend Enumerable.Reverse und Array.Reverse Methoden.

IEnumerable<char>.Reverse: Gibt ein neues umgekehrt Array, ohne das alte Array Ändern

myArray = myArray.Reverse(); 

Array.Reverse: A Void Methode, die das Eingangs-Array

Array.Reverse(myArray); 
+1

Ja, das hat super funktioniert danke – Callum

+0

@Callum Du bist willkommen – Mhd

0

Reverse Verfahren ist ein Verfahren, das ein neues Array (oder Sammlung) liefert, basierend auf den ursprünglichen Einzelteile.

public static string ReverseString(string word) 
{ 
    char[] myArray = word.ToCharArray(); 
    myArray = myArray.Reverse().ToArray(); //<-- Call ToArray() method to convert back to the array and execute the deffered action. 

    string ans = string.Join("", myArray); 

    return ans; 
} 

Dieses Verfahren wird durch die Verwendung verzögerte Ausführung realisiert. Der sofortige Rückgabewert ist ein Objekt, das alle Informationen speichert, die für die Ausführung der Aktion erforderlich sind. Die Abfrage, die von dieser Methode dargestellt wird, wird nicht ausgeführt, bis das Objekt entweder durch Aufrufen seiner GetEnumerator-Methode direkt oder mithilfe von Foreach in Visual C# oder For Each in Visual Basic aufgelistet wird.

Im Gegensatz zu OrderBy berücksichtigt diese Sortiermethode nicht die tatsächlichen Werte selbst bei der Bestimmung der Reihenfolge. Stattdessen gibt es einfach die Elemente in der umgekehrten Reihenfolge zurück, aus der sie von der zugrunde liegenden Quelle erzeugt werden.

0

Sie müssen den Rückgabewert in einer Variablen speichern:

var reversed = myArray.Reverse(); 

Dies ist die Signatur für Reverse() Methode, die Sie verwenden, nebenbei gesagt, das ist eine Erweiterung Methode in der Enumerable Klasse:

Siehe die Rückgabetyp ist ein IEnumerable so müssen Sie das speichern und dann damit arbeiten.

Sie können dies nur tun:

public static string ReverseString(string word) 
{ 
    return string.IsNullOrWhiteSpace(word) ? string.Empty 
     : string.Concat(word.Reverse()); 
} 
4

Das Problem ist, dass myArray.Reverse() nicht myArray ändern. Diese Methode gibt ein IEnumerable mit der Umkehrung von myArray zurück.

Versuchen Sie folgendes:

var reversed = myArray.Reverse(); 

Und dann mit umgekehrt arbeiten.

6

Vielleicht verwirren Sie die Methode, die Sie mit der statischenArray.Reverse verwenden, die in der Tat eine void Methode ist?obwohl

Enumerable.Reverse Method (IEnumerable)


Für Ihren speziellen Fall:

Array.Reverse Method (Array)


Die Sie verwenden eine LINQ-Extension-Methode von IEnumerable, deren Referenz finden Sie hier Würde ich diesen oneliner verwenden:

return new string(word.Reverse().ToArray()); 
0
public static string ReverseString(string word) 
{ 
    return string.Join("", word.Reverse()); 
} 
+0

Du könntest auch 'string.Concat' anstelle von einem leeren Delimiter verwenden. –

0

Sie tun sollten umkehren werden Array.Reverse(myArray)