【问题标题】:Is there a shortcut to fuse individual elements of two same sized Array of an Array of Strings?是否有一种捷径可以融合两个相同大小的字符串数组中的单个元素?
【发布时间】:2012-03-25 22:20:21
【问题描述】:

我有两个字符串数组

[["1,'Tambaú','Praça Santo António','Tambaú','12x0',2,'I','EM',12,6,5934,50"], 
 ["2,'Beira Rio','Av. Bei ra Rio, Prox. Av Odilon Coutinho','Beira Rio','12x0',2,'I','EM',12,0,7249,0"], 
 ["3,'Cabo Branco','Cabo Bra nco, Prox. Rua Alice de Almeida','Cabo Branco','12x0',2,'I','EO',12,0,4751,0"], 
 ["901,'teste','teste','test e','Mini-estação de demonstração',1,'I','EO',2,1,97,50"]
]

[["-7.1105596,-34.824085"],
 ["-7.1243144,-34.823312"],
 ["-7.1395805,-34.816446"],
 ["-7.1008926,-35.068359"]]

我可以通过循环和添加元素以手动方式完成,但我想知道是否有人知道是否存在更智能的方式。

编辑:这是我想要解决任何困惑的结果

[
 "1,'Tambaú','Praça Santo António','Tambaú','12x0',2,'I','EM',12,6,5934,50,-7.1105596,-34.824085",
 "2,' Beira Rio','Av. Beira Rio, Prox. Av Odilon Coutinho','Beira Rio','12x0',2,'I','EM',12,0,7249,0,-7.1243144, -34.823312",
 "3,'Cabo Branco','Cabo Branco, Prox. Rua Alice de Almeida','Cabo Branco','12x0',2,'I','EO',12, 0,4751,0,-7.1395805,-34.816446", 
 "901,'teste','teste','teste','Mini-estação de demonstração',1,'I','EO' ,2,1,97,50,-7.1008926,-35.068359"
]

这就是我现在正在做的事情

for i in 0...arr1.size
  newArr[i] = (arr1[i][0] + "," + arr2[i][0])
end

【问题讨论】:

  • “保险丝”是什么意思?您的预期输出是什么?
  • 为什么需要数组中的数组?为了表示您在示例中显示的数据,字符串数组就足够了。使用Array#flatten,您可以创建这样一个字符串数组。当你写 fuse - 结果应该是什么?将数组 1 的字符串与数组 2 的字符串连接起来?或者你想要一个由两个字符串组成的数组?
  • 无论如何Array#flattenArray#zip 可能是你的朋友。
  • @AndrewMarshall - 我的意思是连接。这是预期的结果["1,'Tambaú','Praça Santo António','Tambaú','12x0',2,'I','EM',12,6,5934,50,-7.1105596,-34.824085", "2,' Beira Rio','Av. Beira Rio, Prox. Av Odilon Coutinho','Beira Rio','12x0',2,'I','EM',12,0,7249,0,-7.1243144, -34.823312", "3,'Cabo Branco','Cabo Branco, Prox. Rua Alice de Almeida','Cabo Branco','12x0',2,'I','EO',12, 0,4751,0,-7.1395805,-34.816446", "901,'teste','teste','teste','Mini-estação de demonstração',1,'I','EO' ,2,1,97,50,-7.1008926,-35.068359"]
  • @NiklasB。和knut - 我不知道扁平和拉链。谢谢,我会看看那些。

标签: ruby arrays multidimensional-array


【解决方案1】:

flattenzip,然后是 mapjoin

arr1 = [
  ["1,'Tambaú','Praça Santo António','Tambaú','12x0',2,'I','EM',12,6,5934,50"], 
  ["2,'Beira Rio','Av. Bei ra Rio, Prox. Av Odilon Coutinho','Beira Rio','12x0',2,'I','EM',12,0,7249,0"], 
  ["3,'Cabo Branco','Cabo Bra nco, Prox. Rua Alice de Almeida','Cabo Branco','12x0',2,'I','EO',12,0,4751,0"], 
  ["901,'teste','teste','test e','Mini-estação de demonstração',1,'I','EO',2,1,97,50"]
]

arr2 = [
  ["-7.1105596,-34.824085"],
  ["-7.1243144,-34.823312"],
  ["-7.1395805,-34.816446"],
  ["-7.1008926,-35.068359"]
]

arr1.flatten.zip(arr2.flatten).map { |pair| pair.join(',') }
#=> ["1,'Tamba','Praa Santo Antnio','Tamba','12x0',2,'I','EM',12,6,5934,50,-7.1105596,-34.824085"],
#    "2,'Beira Rio','Av. Bei ra Rio, Prox. Av Odilon Coutinho','Beira Rio','12x0',2,'I','EM',12,0,7249,0,-7.1243144,-34.823312",
#    "3,'Cabo Branco','Cabo Bra nco, Prox. Rua Alice de Almeida','Cabo Branco','12x0',2,'I','EO',12,0,4751,0,-7.1395805,-34.816446",
#    "901,'teste','teste','test e','Mini-estao de demonstrao',1,'I','EO',2,1,97,50,-7.1008926,-35.068359"]

【讨论】:

  • 谢谢!地图功能对我来说是新的。
【解决方案2】:

此解决方案将数组保留在数组中(Arr1 将被修改!)

arr1 = [
  ["1,'Tambaú','Praça Santo António','Tambaú','12x0',2,'I','EM',12,6,5934,50"], 
  ["2,'Beira Rio','Av. Bei ra Rio, Prox. Av Odilon Coutinho','Beira Rio','12x0',2,'I','EM',12,0,7249,0"], 
  ["3,'Cabo Branco','Cabo Bra nco, Prox. Rua Alice de Almeida','Cabo Branco','12x0',2,'I','EO',12,0,4751,0"], 
  ["901,'teste','teste','test e','Mini-estação de demonstração',1,'I','EO',2,1,97,50"]
]

arr2 = [["-7.1105596,-34.824085"], ["-7.1243144,-34.823312"], ["-7.1395805,-34.816446"], ["-7.1008926,-35.068359"]]


arr1.each_with_index{|el,i|
  el.first << ',' 
  el.first << arr2[i].first
}

使用arr1.flatten!,您可以从您的数组数组中创建一个“普通”数组。

您也可以在“熔断”之前执行flatten

arr1 = [
  ["1,'Tambaú','Praça Santo António','Tambaú','12x0',2,'I','EM',12,6,5934,50"], 
  ["2,'Beira Rio','Av. Bei ra Rio, Prox. Av Odilon Coutinho','Beira Rio','12x0',2,'I','EM',12,0,7249,0"], 
  ["3,'Cabo Branco','Cabo Bra nco, Prox. Rua Alice de Almeida','Cabo Branco','12x0',2,'I','EO',12,0,4751,0"], 
  ["901,'teste','teste','test e','Mini-estação de demonstração',1,'I','EO',2,1,97,50"]
]
arr1.flatten!

arr2 = [["-7.1105596,-34.824085"], ["-7.1243144,-34.823312"], ["-7.1395805,-34.816446"], ["-7.1008926,-35.068359"]]
arr2.flatten!

arr1.each_with_index{|el,i|
  el << ','
  el << arr2[i]
}

【讨论】:

  • 啊啊啊变量名大写和多行{}!为什么呢?
  • 大写的变量名使其成为常量。
  • 抱歉,我从现有解决方案中复制,没有查看名称 - 对我来说已经很晚了;)我修改了示例。
  • 这行得通,但我对你使用的 each_with_index 函数感到困惑。它没有在 ruby​​ 文档中列出,但是有一个 close 方法 each_index,这是一样的吗? http://www.ruby-doc.org/core-1.9.2/Array.html#method-i-each_index
  • @devcoder each_with_index comes from Enumerable。数组包含 Enumerable 所以它也得到它。
猜你喜欢
  • 1970-01-01
  • 2012-08-17
  • 2021-12-23
  • 2013-05-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-09-27
  • 2019-08-05
相关资源
最近更新 更多