【发布时间】:2021-01-29 14:03:24
【问题描述】:
晚上好。我有一个嵌套的名称数组。调用特定索引并使用 == 返回 true。使用 .flatten 后,在相同的值上使用 == 会返回 false。
name_array
=> [["Theo", "Peter Jr.", "Lucky"], ["Theo", "Peter Jr.", "Ms. K"], ["Queenie", "Andrew", "Ms. K", "Alex"], ["Queenie", "Alex"]]
irb(main):044:0> name_array[0][0]
=> "Theo"
irb(main):045:0> name_array[1][0]
=> "Theo"
irb(main):046:0> name_array[0][0] == name_array[1][0]
=> true
irb(main):047:0> name_array.flatten
=> ["Theo", "Peter Jr.", "Lucky", "Theo", "Peter Jr.", "Ms. K", "Queenie", "Andrew", "Ms. K", "Alex", "Queenie", "Alex"]
irb(main):048:0> name_array[0] == name_array[3]
=> false
这里的最终目标是返回一个唯一名称的数组。
我的第一直觉是使用.uniq,但这最终会返回原始的嵌套数组。应该注意的是,我首先通过将嵌套哈希转换为数组然后将数组值添加到 name_array 来获得这个嵌套数组。
irb(main):051:0> name_array.flatten
=> ["Theo", "Peter Jr.", "Lucky", "Theo", "Peter Jr.", "Ms. K", "Queenie", "Andrew", "Ms. K", "Alex", "Queenie", "Alex"]
irb(main):052:0> name_array.uniq
=> [["Theo", "Peter Jr.", "Lucky"], ["Theo", "Peter Jr.", "Ms. K"], ["Queenie", "Andrew", "Ms. K", "Alex"], ["Queenie", "Alex"]]
【问题讨论】:
-
您的预期输出是什么?因为 IMO 所有数组都不同,所以所有数组都应该返回。我错了?你期待不同的结果吗?
-
Ruby 总是返回最后执行的函数的值,这就是
irb打印的内容。当您执行name_array.flatten时,它会返回一个新的扁平数组,irb会打印结果。展平的数组没有分配给任何变量,一旦超出范围就会被丢弃。name_array仍然保持原始值。使用name_array.flatten.uniq获得您想要的结果。但是您仍然需要将结果分配给变量...
标签: arrays ruby multidimensional-array