1, "e"=> 1, "l"=> 3, "o"=> 2, "W"=> 1, "r"=> 1, "d"=> 1} 作为参数并返回其键值对的数组,如下所-6ren">
gpt4 book ai didi

arrays - 将散列转换为数组

转载 作者:太空宇宙 更新时间:2023-11-03 17:21:35 25 4
gpt4 key购买 nike

我正在尝试创建一个采用散列的方法:

{"H"=> 1, "e"=> 1, "l"=> 3, "o"=> 2, "W"=> 1, "r"=> 1, "d"=> 1}

作为参数并返回其键值对的数组,如下所示:

arr = [["H", 1], ["e", 1], ..., ["d", 1]]

我有以下内容,但它有缺陷:

def toCountsArray(counts)
arr = []
i = 0
counts.each do |key, value|
arr[i].push [key, value]
i += 1
end
return arr
end

我不应该使用 to_a 方法或任何类似的助手。感谢您提供任何帮助或指导。

最佳答案

你基本上就在那里。对 to_a 的任意限制很奇怪,因为有很多方法可以有效地获得相同的东西。不过,要修复您的原始示例:

array = [ ]
counts.each do |pair|
array << pair
end

这是执行 to_a 的一种困惑方式,但它应该有效。您的错误是试图附加到 array特定元素,而不是附加到数组本身。

执行此类操作时使用的模式是这样的:

counts = Hash.new(0)

这会为每个元素创建一个默认值为 0 的哈希。这避免了分配给未定义的键时必须执行的操作。

您还可以做一些其他的事情来减少这种情况并使其更像 Ruby:

def count_chars(string)
string.chars.each_with_object(Hash.new(0)) do |char, counts|
case (char)
when ' '
# Ignored
else
counts[char] += 1
end
end
end

each_with_object 方法很方便,因为它在遍历数组的同时传递每次迭代都可以使用的对象。将 Hash 的技巧与默认值相结合,使它变得非常整洁。

如果您有更长的“要忽略”字符列表,请将其表示为数组。 string.chars - exclusions 然后可以删除不需要的。我在这里使用了 case 语句来简化添加特殊行为。

关于arrays - 将散列转换为数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35369835/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com