【问题标题】:ruby arrays put first, second into variables, and the rest into another variableruby 数组将第一个,第二个放入变量中,其余放入另一个变量中
【发布时间】:2013-05-31 13:20:59
【问题描述】:

我想把一个数组分成三个变量;第一个值放入一个变量中,第二个值放入另一个变量中,其余的都放入一个字符串中,例如:

arr = ["a1","b2","c3","d4","e5","f6"]
var1 = arr[0] # var1 => "a1"
var2 = arr[1] # var2 => "b2"
var3 = ? # var3 should be => "c3d4e5f6"

需要什么代码来实现每个变量的列出值?

【问题讨论】:

  • 如果var3 占据了其余部分,则应该是["c3","d4","e5","f6"],而不是"c3d4e5f6"
  • 它没有。看起来您根本不想要未连接的数组,这与您在问题中所说的不匹配。
  • 现在有点意思了。
  • @sawa 哇!来自你的赞美真是太棒了! (不过,我并没有生你的气或其他什么)

标签: ruby arrays variables


【解决方案1】:

这似乎和任何事情一样好:

arr = ["a1","b2","c3","d4","e5","f6"]
var1 = arr[0]            # => "a1"
var2 = arr[1]            # => "b2"
var3 = arr[2..-1].join   # => "c3d4e5f6"

如果您不需要保留arr,您可以这样做:

arr = ["a1","b2","c3","d4","e5","f6"]
var1 = arr.shift   # => "a1"
var2 = arr.shift   # => "b2"
var3 = arr.join    # => "c3d4e5f6"

其他人都在指出splat运算符,这是可以理解的,但我认为这比上面的更糟糕:

arr = ["a1","b2","c3","d4","e5","f6"]
var1, var2, *tmp = arr
var3 = tmp.join

原来是这样的:

arr = ["a1","b2","c3","d4","e5","f6"]
var1, var2, *var3 = arr
var3 = var3.join

不过,这是一个需要注意的选项。

【讨论】:

  • 谢谢!第二个例子是完美的。我刚接触红宝石,我不知道array.shift。这正是我想要的。
  • “如果arr 太短,两个版本都分配nil”并不完全正确。例如[][2..-1].nil?[0][2..-1].nil? 都是真的。
  • @muistooshort 谢谢;我删除了该声明。
【解决方案2】:

这是使用splat assignment (aka array destructuring)的另一种形式:

arr = ["a1","b2","c3","d4","e5","f6"]
# "splat assignment"
var1, var2, *var3 = arr
# note that var3 is an Array:
#  var1 -> "a1"
#  var2 -> "b2"
#  var3 -> ["c3","d4","e5","f6"]

另见:

【讨论】:

  • 我知道想要使用 splat 运算符,但您实际上并没有向 OP 提供他们要求的内容。在我看来,让var3 进入正确的状态(一个字符串)会失去很多飞溅的价值。
  • @DarshanComputing OP 的问题是矛盾的 OP 在问题中要求一个数组,但在预期输出中给出一个字符串。应该责备的是问题,而不是这个答案。
  • @sawa 我已经读了三遍这个问题(包括编辑),我看不到他们要求数组的任何地方。问题和示例是 100% 一致的。所有三个变量都应设置为字符串。这一点没有歧义。
  • @DarshanComputing 输入是一个数组,问题是要求(在早期版本中)将第一个、第二个和剩余元素作为第一个、第二个和第三个变量分别,没有提到加入或变成一个字符串。如果你从一个数组中取除两个元素之外的所有元素,你会得到一个数组。第一个和第二个元素是从头开始的字符串。
【解决方案3】:

使用 splat 运算符:

arr = ["a1","b2","c3","d4","e5","f6"]
var1, var2, *var3 = arr

# var1 => "a1"
# var2 => "a2"
# var3 => ["c3", "d4", "e5", "f6"]

【讨论】:

  • 我有保存反馈给你,就像我给 user2246674 一样:这让你基本上在那里,但你还没有完成,剩下的部分会带走飞溅的大部分优雅,在我看来。我很想展示一些我没想到的优雅的东西,如果它在那里的话。无论如何,这并不能回答问题。
猜你喜欢
  • 2020-09-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2016-07-11
  • 2015-07-15
  • 1970-01-01
  • 1970-01-01
  • 2018-10-08
相关资源
最近更新 更多