【问题标题】:How to extract keys from an array如何从数组中提取键
【发布时间】:2018-12-17 17:50:08
【问题描述】:

我有一个标签数组

[
{"1boy": 0.9390615820884703},
{"solo": 0.9158311486244202},
{"male": 0.6592671275138855},
{"black hair": 0.4281844198703766},
] 

如何从这个哈希数组中提取字符串,以便它们显示为列表:

  • 1男孩
  • 独奏
  • 男性
  • 黑头发

【问题讨论】:

  • .flat_map(&:keys) # => [:"1boy", :solo, :male, :"black hair"]
  • 您写了“字符串”,但您的哈希数组中没有字符串。
  • 您希望提取密钥(作为数组)还是打印它们?如果是前者,则没有必要规定它们如何“显示为列表”(尤其是使用项目符号)。只需询问如何创建键数组,句号。如果您想以特定格式显示键(例如,使用项目符号)。问那个。由于您在散列中使用的键-冒号-值格式,所有键都是符号。仅当字符串包含空格或不以字母开头时,符号必须表示为冒号后面的带引号的字符串。这里比如"solo":可以写成solo:

标签: arrays ruby list ruby-on-rails-3 hash


【解决方案1】:

如果您没有嵌套结构或只需要第一级的键:

.map{ |h| h.keys.first.to_s }

【讨论】:

  • 更好的选择是ary.map(&:keys).flatten 包含所有键,而不仅仅是第一个键。
  • 我同意,但最好的解决方案是.flat_map(&:keys)
  • flat_mapmap().flatten 做同样的事情,只是更快。 apidock.com/ruby/Enumerable/…
【解决方案2】:

正如 SimpleLime 在评论中发布的那样,最优雅的方式是使用 flat_map

.flat_map(&:keys)

在您的问题中,您将键称为“字符串”,但在您的示例中,它们是符号。您用于哈希的语法是将您的“字符串”转换为符号。

"1boy": 0.9390615820884703

这使得键的符号看起来像一个字符串,但不是。 Ruby 允许使用字符串创建符号,这对于使用通常不允许的字符(例如标点符号或空格)创建符号很有用。

:"some string?!".class
=> Symbol

如果您确实需要字符串作为键,则必须使用带有=> 运算符的“旧”语法:

"1boy" => 0.9390615820884703

所以要返回实际的字符串,您还需要对它们进行转换。一种可能的方法是:

.flat_map(&:keys).map(&:to_s)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-11
    • 1970-01-01
    • 1970-01-01
    • 2018-10-03
    • 1970-01-01
    相关资源
    最近更新 更多