首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用转置函数会导致错误。

使用转置函数会导致错误。
EN

Stack Overflow用户
提问于 2018-07-01 10:24:02
回答 3查看 108关注 0票数 2

考虑以下数组

代码语言:javascript
复制
arr = [["Locator", "Test1", "string1","string2","string3","string4"],
       ["$LogicalName", "Create Individual Contact","value1","value2"]]

预期结果:

代码语言:javascript
复制
[Test1=>{"string1"=>"value1","string2"=>"value2","string3"=>"","string4"=>""}]

当我转置时,它说数组的第二个元素不是数组中第一个元素的长度,这给了我错误,

代码语言:javascript
复制
Uncaught exception: element size differs (2 should be 4)

那么,在没有元素的地方是否可以添加空字符串,并且可以执行转置,然后像我前面给出的那样创建散列呢?数组可能由许多不同长度的元素组成,但根据数组中第一个元素的大小,每个其他内部数组都必须通过插入空字符串来更改,然后我可以执行转置操作。有办法吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-07-01 10:52:40

听起来你可能想要Enumerable#zip

代码语言:javascript
复制
headers, *data_rows = input_data
headers.zip(*data_rows)
# => [["Locator", "$LogicalName"], ["Test1", "Create Individual Contact"],
#     ["string1", "value1"], ["string2", "value2"], ["string3", nil], ["string4", nil]]
票数 1
EN

Stack Overflow用户

发布于 2018-07-01 20:24:33

如果希望转换数组,则数组的每个元素必须大小相同。在这里,您需要执行如下操作。

代码语言:javascript
复制
arr = [["Locator", "Test1", "string1","string2","string3","string4"],
       ["$LogicalName", "Create Individual Contact","value1","value2"]]

keys, vals = arr
  #=> [["Locator", "Test1", "string1", "string2", "string3", "string4"],
  #    ["$LogicalName", "Create Individual Contact", "value1", "value2"]]
idx = keys.index("Test1") + 1
  #=> 2

{ "Test1" => [keys[idx..-1],
              vals[idx..-1].
                concat(['']*(keys.size - vals.size))].
                transpose.
                to_h }
  #=> {"Test1"=>{"string1"=>"value1", "string2"=>"value2", "string3"=>"", "string4"=>""}}

严格来说,没有必要定义变量keysvals,但这避免了多次创建这些数组的需要。在我看来,它读起来也更好。

步骤如下。注意keys.size #=> 6vals.size #=> 4

代码语言:javascript
复制
a = vals[idx..-1]
  #=> vals[2..-1]
  #=> ["value1", "value2"]
b = [""]*(keys.size - vals.size)
  #=> [""]*(4 - 2)
  #=> ["", ""]
c = a.concat(b)
  #=> ["value1", "value2", "", ""]
d = keys[idx..-1]
  #=> ["string1", "string2", "string3", "string4"]
e = [d, c].transpose
  #=> [["string1", "value1"], ["string2", "value2"], ["string3", ""], ["string4", ""]]
f = e.to_h
  #=> {"string1"=>"value1", "string2"=>"value2", "string3"=>"", "string4"=>""}
f = e.to_h
  #=> { "Test1" => f }
票数 1
EN

Stack Overflow用户

发布于 2018-07-01 10:31:05

查找数组中最长的元素,并确保其他每个元素都具有相同的长度-循环,并添加maxLength - element(i).length数量的"“元素。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51122430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档