2014-12-30 3 views
0

У меня есть следующий код, чтобы изменить строку:Реверсивные Массивы, Array.Reverse()

Console.Title = "*****Reverse a String*****"; 
Console.WriteLine("*****Reverse a String*****"); 
Console.WriteLine("=> Enter the text to be reversed:"); 
string input = Console.ReadLine(); 
Console.WriteLine("=> Reversing..."); 
char[] arrInput = input.ToCharArray(); 
Array.Reverse(arrInput); 
String final = new String(arrInput); 
Console.WriteLine("=> {0}", final); 
Console.WriteLine("=> Press any key to terminate."); 
Console.ReadKey(); 

Array.Reverse (arrInput) работает, но arrInput.Reverse() не делает! Любые указатели?

ответ

3

arrInput.Reverse использует LINQ Reverse метод, который не изменяет оригинальную коллекцию. Вам нужно позвонить ToArray на нем

var reversed = arrInput.Reverse().ToArray(); 
+1

Спасибо! Выберете в качестве ответа, когда это позволит мне! –

1

arrInput.Reverse() возвращает перечислимы:

IEnumerable<char> inputEnumerable = arrInput.Reverse(); 

Кроме того, как Selman22 указывает, Reverse() собирается возвращать IEnumerable не массив, так что вы также должны добавить ToArray(), если вы хотите использовать оригинальную переменную:

arrInput = arrInput.Reverse().ToArray(); 
+1

не она возвращает IEnumerable

+0

@ Selman22 Хороший вопрос, Я думал, что массив может содержать IEnumerable по какой-то причине –

0

Вы не должны явно создать массив для использования метода Reverse; не вы могли бы просто сделать это:

// Get string from user as you're already doing 
string input = Console.ReadLine(); 

// Reverse it and assign to new string 
string reversed = new string(input.Reverse().ToArray()); 

Другими словами, этот код:

string input = Console.ReadLine(); 
Console.WriteLine("=> Reversing..."); 
char[] arrInput = input.ToCharArray(); 
Array.Reverse(arrInput); 
String final = new String(arrInput); 

Может быть упрощена:

string input = Console.ReadLine(); 
Console.WriteLine("=> Reversing..."); 
String final = new String(input.Reverse().ToArray()); 
+0

Не было бы .ToArray() сделать массив, который сделал бы его массив при обратном - это строка? –

+0

@ LukeParker Не совсем; Сначала вызывается 'Reverse', который возвращает IEnumerable . Вызов ToArray() необходим для преобразования 'IEnumerable' в тип' Array' для конструктора 'string'. Но вы можете вызывать 'Reverse' в строке, не преобразовывая ее в массив, например: var varnd =" some String ".Reverse();'. Так же, как вы можете захватить символ из строки с помощью индекса без явного преобразования его в массив: 'char 4thCharacter =" someString "[3];' –

+0

Обновленный ответ о том, как можно удалить явное объявление массива, надеюсь, что это поможет. –

Смежные вопросы