从字符串列表中删除重复项(从Twilio调用输出 - Ruby)

时间:2013-12-18 03:10:48

标签: ruby arrays string twilio

我正在尝试显示来自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',我也试图'压扁'。

请赐教!谢谢!

3 个答案:

答案 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