当前位置: 首页 > 知识库问答 >
问题:

如何在Ruby中从哈希表中获取第一个键和值对

顾池暝
2023-03-14

我试图从ruby中的哈希表中获取第一个键和值键。我不知道散列的键值,因为它被传递给了方法。我在网上找不到如何将第一个键/值作为单独的哈希表查找。我认为hash[0]只会试图找到一个名为0的元素,当我运行代码时,它只会返回nil

我知道我可以找到密钥名和值,然后根据它们创建一个新的哈希,但我想知道是否有更简单的方法来做到这一点,这样我就可以立即得到一个哈希。

下面是我的代码:

def rps_game_winner(game)

rock_in_hash = game.invert['R']
paper_in_hash = game.invert['P']
scissors_in_hash = game.invert['S']

if(rock_in_hash)
      if(paper_in_hash)
        return paper_in_hash;
      elsif(scissors_in_hash)
        return rock_in_hash
      end
    elsif(paper_in_hash)
      if(rock_in_hash)
        return paper_in_hash
      elsif(scissors_in_hash)
        return scissors_in_hash
      end
    end
        key = game.keys[-1]
        value = game.values[-1]
            winner = {key => value}
    return winner 
    end

game_one = { "Bob" => 'P', "Jim" => 'P' }

puts rps_game_winner(game_one)

这让我得到了正确的结果问题是我不明白为什么它是-1而不是零。。。我希望有更好的方法来获取哈希表的第一个键/值对,而不是用从上一个表中检索到的键和值创建新的哈希表。

共有3个答案

凌声
2023-03-14
[hash.first].to_h

另一种方法。

慕容弘懿
2023-03-14

有一个更简短的答案,不需要你使用额外的变量:

h = { "a" => 100, "b" => 200 , "c" => 300, "d" => 400, "e" => 500}
Hash[*h.first] #=> {"a" => 100}

或者,如果要在任意位置检索键/值

Hash[*h.to_a.at(1)] #=> {"b" => 200}

或者从一系列位置检索一个键/值:

 Hash[h.to_a[1,3]] #=> {"b"=>200, "c"=>300, "d"=>400}
羊舌承
2023-03-14

你可以就这么做

key, value = hash.first

或者如果你喜欢:

key = hash.keys[0]
value = hash.values[0]

那么也许:

new_hash = {key => value}
 类似资料:
  • 我在Spring和Redis上都很新。我想知道有没有办法按价值得到钥匙? 例如,我希望获得具有给定文件哈希和内容的图像类型文件的get the KEY。我是这样做的: 然而,我被告知这是相当昂贵的,因为我要获得所有以“image”开头的键,并手动检查所有这些键。 现在我在想,也许如果我能按价值得到钥匙会好得多。以便更容易得到它的所有属性。在Redis可能吗?

  • 我试图使用Datastax驱动程序将作为<code>int、time、hash</code>提供的值存储到Cassandra中。 哈希显示为< code>{ "Q17.1_4"= 已将表定义为: 整数 时间戳 地图 PK(int,时间戳) 我可以把PK插入ok,但是我很难把哈希值强制转换成Cassandra可以处理的东西。 创建了一个准备好的语句,并在(尝试)遍历值时使用它: 如果我将“val”作

  • 问题内容: for (Entry entry : map.entrySet()) { Double key = entry.getKey(); String value = entry.getValue(); 迭代地图时是否可以知道上一个元素和下一个元素是什么? 问题答案: 您可以使用此方法,它的迭代器以升序顺序返回条目: 每个条目检索都是O(logN),因此对于完整迭代而言,这不是最有效的方法。

  • 问题内容: 我有一个哈希图如下 我的Freemarker模板是: 目的是在生成的HTML中显示键值对。请帮我做。谢谢! 问题答案: 码: 模板: 输出:

  • 问题内容: 我有一个哈希图,如下所示: 1-> x 2-> y 3-> x 4-> z 现在我想知道所有值为x的键(ans:[1,3])。最好的方法是什么? 蛮力方式是仅遍历map并将所有键存储在值为x的数组中。 有什么有效的方法吗? 谢谢 问题答案: 您可以使用轻松获取所有这些重复的值。 打印输出: 每@ noahz 的建议,并需要更少的线,但可以说是更加复杂的阅读: 代替:

  • 输入是一个哈希映射,比如 我想写一个方法,返回类型A的列表,其中有键,值属性与字符串类型,和键值从hashmap。 如何让它成为现实?