编写一种方法来检查字符串中的元音数量

时间:2016-10-28 16:31:28

标签: ruby-on-rails ruby

我有一个数据哈希,其中包含不同的字符串作为其键。我需要在我的班级中创建一个新方法,它将计算每个键中元音的数量,然后返回元音最多的键。我很困难,这就是我到目前为止所做的。

def create(self, validated_data):
    try:
        user = User.objects.get(email=validated_data['email'])
        // There was already a user with that email, do something
    except User.DoesNotExist:
        user = User.objects.create_user(**validated_data)
        if settings.get('SEND_ACTIVATION_EMAIL'):
            with transaction.atomic():
                user.is_active = False
                user.save(update_fields=['is_active'])

    return user

有人可以帮忙吗?

4 个答案:

答案 0 :(得分:1)

String#count可能对您有所帮助:

date

答案 1 :(得分:0)

这将获得元音最多的关键词:

@submitted_wishes.keys.max_by { |key| key.count('aeiou') }

答案 2 :(得分:0)

我会使用以下方法:

def count_vowels(str)
  str.count 'aeiou'
end

def highest_value_key(hash)
  hash.key(hash.values.max)
end

这些方法背后的想法是将问题分开并使其更具可读性。

答案 3 :(得分:0)

h = { "Mary"=>"Mary", "quite"=>"contrary", "how"=>"does your", "garden"=>"grow?" }

h.map { |k,_| [k.count('aeiou'), k] }.max.last
  #=> => "quite"

步骤:

a = h.map { |k,_| [k.count('aeiou'), k] }
  #=> [[1, "Mary"], [3, "quite"], [1, "how"], [2, "garden"]] 
b = a.max
  #=> [3, "quite"]
b.last
  #=> "quite"

有关如何排序数组的解释(在计算max时),请参阅Array#<=>

如果键k1k2与最大元音数相关联,则k1 <=> k2会打破平局(k1 k1 <=> k2 #=> -1会返回k2,{{1}如果k1 <=> k2 #=> 1,则会返回},k1 <=> k2 #=> 0时可能会返回任一键。请参阅String#<=>