【问题标题】:How to swap two strings?如何交换两个字符串?
【发布时间】:2015-06-07 17:35:06
【问题描述】:

我有 两个 变量要切换,它们是 字符串。 它们包含 firstsecond 名称。

我想使用least possible amount of lines 切换它们,所以我没有创建第三个变量。

我尝试使用 xor swap,但一条错误消息显示无法将 James Adams 转换为类型 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。

【问题讨论】:

  • 是什么让您认为第三个变量效率低下?
  • 您关心使用的行数或内存使用情况?后者不会有所作为,因为任何其他方式都必须使用某种变量,一种方式或另一种方式。就线路而言,我发现有 3 行来做你想做的事情没有任何问题。 Xor是按位运算,0Xor1=1, 1Xor1=0....
  • 这是一个单行:Dim a = "a" : Dim b = "b" : Dim t = a : a = b : b = t
  • 既然它们在 2 个变量中,为什么你必须交换它们呢?只需在需要时以不同的顺序使用它们。 真正的问题是程序员在错误的地方和错误的时间花费了太多时间来担心效率 - Knuth。另见Micro-Optimization and Meatballs
  • 顺便说一句,你为什么要标记你的问题arrays

标签: arrays vb.net swap xor


【解决方案1】:

“异或交换技巧”是在整数类型上定义的。字符串不是整数类型,而是这种类型的序列。

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

考虑改用临时变量。

【讨论】:

  • 那么字符串有替代品吗
  • @John.R,如果你有两个长度相等的字符序列,你可以在每个索引处异或交换每个字符对。
  • 它们是不同长度的名称
  • 对于不同长度的字符串,必须用最短的填充到最长的长度。填充字符是特定于应用程序的,但可能是空格字符或空字符。
  • 感谢您的帮助,但我对编码非常陌生(在 IT 课上做),所以这些事情让我无法理解。这似乎有效: myArray = myArray.OrderBy(Function(o) o).ToArray()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多