2015-06-07 3 views
-4

У меня есть два переменные Я хочу выключатель которые строки. Они содержат и первые и второй имя.Как поменять две строки?

Я хотел переключить их, используя least possible amount of lines, поэтому я не создал третью переменную.

Я пробовал использовать xor swap, но в сообщении об ошибке говорится, что Джеймс Адамс не может быть преобразован в тип long.

Является xor только для целых, если да, то как я могу поменять переменные эффективно? Спасибо, любые идеи оценили. Я добавлю код, если это будет полезно.

Plutonix предложил names = names.OrderBy(Function(o) o).ToArray() который работает. Благодарю. Может ли кто-нибудь объяснить, как это происходит, потому что я этого раньше не видел?

For counter1 = 0 to 5 
    For counter2 = counter1 + 1 to 5 
     If names(counter1) >      names(counter2) then 

      names = names.OrderBy(Function(o) o).ToArray() 
     End if 
    Next 
Next 

Извините, что проблема форматирования или обвинение Apple.

+0

рассмотреть вопрос о добавлении ваших кодов. –

+6

что заставляет вас думать, что третья переменная неэффективна? – Plutonix

+2

вас беспокоят используемые линии или использование памяти? последний не сделал бы различий, так как любой другой способ должен будет использовать какую-то переменную, так или иначе. Что касается строк, я не нахожу проблем с 3 строками, чтобы делать то, что вы хотите. Xor - побитовая операция, 0Xor1 = 1, 1Xor1 = 0 .... –

ответ

0

«xor swap trick» определен на интегральных типах. Строка не является интегральным типом, а скорее последовательностью такого типа.

http://graphics.stanford.edu/~seander/bithacks.html#SwappingValuesXOR

Рассмотрим использование временной переменной вместо.

+0

Итак, есть альтернатива для строк –

+0

@ John.R, если у вас есть две последовательности символов одинаковой длины, вы можете поменять каждую пару символов по каждому индексу. – rubicks

+0

Это имена различной длины. –