计数出现在阵列
我有一个这样的数组:计数出现在阵列
a= ["foo", "bar", "baz", "foo", "bar", "baz", "foo", "bar", "BAD," "baz"]
,你可以看到,有一个数组中的重复图案:
"foo", "bar", "baz"
,直到最后一个模式它的模式是“坏”。
我想一个方法来寻找模式的最后出现的“‘富’,‘酒吧’,‘巴兹’”因为我只在不遵循模式的最后元素感兴趣。
我期望返回是这样的
array_after_some_method(a) => ["foo", "bar", "BAD", "baz"]
我的思维过程是做这样的事情:在模式
- 转阵成字符串
- 分裂
- 计数出现次数
"bar"
但是,这个过程似乎很hacky。有没有一个聪明的方法来做到这一点?
您可能需要修改一下您的问题;我发现措辞有点混乱。
不过,我觉得你正在寻找这样的事情:
array = ["foo", "bar", "bar", "baz"]
def useful_method(array, str)
array.select { |member|
member == str
}.length
end
useful_method array, 'bar' # => 2
如果定义重复模式与“富”开始这会工作:
a.slice_before(a.first).map { |ary| ary }.last
然而,如果在该模式中有多个'foo'
s,则只会得到最后一个。为了捕捉整个模式,你可以试试这个:
def last_pattern(arr)
arr
.chunk { |x| x } # group by value
.slice_before { |x| x.first == arr.first } # find pattern based on first element in arr
.to_a # turn enumerator into Array
.last # take only the last pattern
.flat_map(&:last) # join the chunked elements back
end
last_pattern(a)
# => ["foo", "bar", "bar", "bad"]
那么就使用Enumerable#count
算为一个特定的元素:
last_pattern(a).count { |x| x == 'bar' }
# => 2
甚至指望他们全部使用可枚举#GROUP_BY:
Hash[last_pattern(a).group_by { |x| x }.map { |k, v| [k, v.length] }]
# => {"foo"=>1, "bar"=>2, "baz"=>1}
这是*很多方法调用。与map {| x,y |有什么关系? [x,y]}'和'map {| x | x}'?那些是没有操作的。 –
好点 - 早期尝试的遗迹。 '''.map {| x | x}'''和'''.to_a'''相同。编辑修复。 – Owen
我自己是一个新的红宝石h蛇人,现在正在学习红宝石方法。我通过了解C++和其他语言的某些部分而具有基本的编程知识。我认为你可以做的是用ruby中的.length方法(或函数)查找数组的长度。然后用一个for循环,并办理各项指标:
,如果这是你的数组声明:
array = ["foo", "bar", "baz","foo", "bar"]
那么你的for循环看起来就像这样:
for array [, variable ...] in expression [do]
if (variable = array[index#])
count++; //count is used to increment the count token to keep track of the occurences of "bar", or "foo" and other array elements
end
end
确切Ruby的语法可能虽然不准确。
塞尔吉奥感谢编辑, 我不知道该怎么做 – Steven
什么是**模式**?它是由人定义还是由程序本身解决? “巴兹”本身就是一种模式吗?如果不是,为什么'[“foo”,“bar”,“bar”,“baz”]'是? – Aetherus
你的问题不清楚,但似乎有趣。您需要通过编辑进行澄清,否则您可能需要更多的投票,然后关闭。最好用文字给出一个完整而明确的问题陈述,但是如果你发现这个问题至少难以举一些例子。使示例尽可能短,显示所需的结果(数字,字符串,数组,散列值,打印值等),并为每个输入对象分配一个变量(如您对'a = [“foo”所做的那样)。 ..'),这样读者就可以在答案和评论中引用这些变量,而不必定义它们。 –
感谢cary ---我现在要编辑。 – user1337902