迭代哈希数组并添加特定哈希值的值

时间:2018-02-04 22:39:24

标签: arrays ruby hash

如果您有一系列哈希,例如:

t = [{'pies' => 1}, {'burgers' => 1}, {'chips' => 1}]

1添加到具有特定键(例如'pies'的哈希值)的有效且可读的方法是什么?

3 个答案:

答案 0 :(得分:4)

这是基于所需键增加数组哈希值的一种方法:

t = [{ 'pies' => 1 }, { 'burgers' => 1 }, { 'chips' => 1 }]

t.each { |hash| hash['pies'] += 1 if hash.key?('pies') }
# => [{"pies"=>2}, {"burgers"=>1}, {"chips"=>1}]

希望这有帮助!

答案 1 :(得分:2)

如果您知道只有一个哈希值可以使用关键词'然后你可以使用find并增加它的值,如:

#include"string.h"

int main() {
    Str s1("Hello ");
    Str s2("World");
    Str s3(", my ");
    Str s4("Name ");
    Str s5("is ");
    Str s6("Chad!");

Str s7;
    s7.copy(s1);
    s7.concatenate(s2);
    s7.concatenate(s3);
    s7.concatenate(s4);
    s7.concatenate(s5);
    s7.concatenate(s6);

    s7.print();

    std::cout << "\n\n";

    Str s8("Hello World, My Name is Chad!");

    if (s8.compare(s7) == 1) {
        std::cout << "They Match!" << std::endl;
    }

    Str s9("I dont match....");

    if (s9.compare(s8) == 0) {
        std::cout << "I differ by " << s8.compare(s6) << " characters" << std::endl;
    }
}

Enumerable#find将尝试查找满足该块的元素,并在返回true时停止迭代。

答案 2 :(得分:0)

您使用的是错误的数据结构。我建议使用哈希。

菜单上的每个项目只能有一个计数(或销售),即每个项目都是唯一的。这可以使用具有唯一键(项)的哈希以及它们对应的值(计数)建模。

t = {'pies' => 1, 'burgers' => 1, 'chips' => 1}

然后我们可以访问密钥并添加到计数中:

t['pies'] += 1
t #=> t = {'pies' => 2, 'burgers' => 1, 'chips' => 1}