我正在尝试显示来自twilio对象的总呼叫以及唯一的呼叫。
总电话很简单:
# set up a client to talk to the Twilio REST API
@sub_account_client = Twilio::REST::Client.new(@account_sid, @auth_token)
@subaccount = @sub_account_client.account
@calls = @subaccount.calls
@total_calls = @calls.list.count
然而,我真的很难弄清楚如何显示独特的呼叫(人们有时会回拨相同的号码而我只想计算来自同一号码的呼叫一次)。我认为这是一个非常简单的方法,但是我已经烧了几个小时试图解决它(仍然是一个红宝石菜鸟)。
目前我一直在控制台中使用它,如下所示:
@sub_account_client = Twilio::REST::Client.new(@account_sid, @auth_token)
@subaccount = @sub_account_client.account
@subaccount.calls.list({})each do |call|
#"from" returns the phone number that called
print call.from
end
返回以下字符串:
+13304833615+13304833615+13304833615+13304833615+13304567890+13304833615+13304833615+13304833615
那里只有两个唯一的数字,所以我希望能够为此返回'2'。
在该输出上调用类显示字符串。我使用“insert”添加一个空格然后进行了拆分(“”)将它们转换为数组,但输出如下:
[+13304833615][+13304833615][+13304833615][+13304833615][+13304567890][+13304833615][+13304833615][+13304833615]
我不能称之为'uniq',我也试图'压扁'。
请赐教!谢谢!
答案 0 :(得分:1)
如果您拥有的是一个您想要操作的字符串,则可以使用以下作品:
%{+ 13304833615 + 13304833615 + 13304833615 + 13304833615 + 13304567890 + 13304833615 + 13304833615 + 13304833615} .split(“+”)。uniq.reject {| x | x.empty? }。计数 => 2
然而,这更理想:
@subaccount.calls.list({}).map(&:from).uniq.count
答案 1 :(得分:0)
您可以直接构建数组,而不是先将其转换为字符串吗?试试这样的事情吧?
@calllist = []
@subaccount.calls.list({})each do |call|
#"from" returns the phone number that called
@calllist.push call.from
end
然后,您应该可以在@calllist上调用uniq,将其缩短为唯一成员。
编辑:@ subaccount.calls.list的对象是什么类型的对象?
答案 2 :(得分:0)
uniq
应该可以用于创建唯一的字符串列表。我想你可能会被其他不相关的东西搞糊涂了。您不希望.split
用于将单个字符串转换为字符串数组(默认按空格分割)。将每个单个数字字符串转换为仅包含该数字的数组。您可能也会因为在irb控制台中执行each
调用而感到困惑,该调用将返回迭代的完整数组,即使您的内循环做了正确的事情。请尝试以下方法:
unique_numbers = @subaccount.calls.list({}).map {|call| call.from }.uniq puts unique_numbers.inspect