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



我正在尝试显示来自 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"添加一个空格,然后做了一个split(" ")将它们变成数组,但输出如下:

[+13304833615][+13304833615][+13304833615][+13304833615][+13304567890][+13304833615][+13304833615][+13304833615]

我不能称之为"uniq",我也试图"扁平化"。

请开导我! 谢谢!

如果你有一个你想要操作的字符串,那么下面就可以了:

%{+13304833615+13304833615+13304833615+13304833615+13304567890+13304833615+13304833615+13304833615}.split("+").uniq.reject { |x| x.empty? }.计数 => 2

但是,这更理想:

@subaccount.calls.list({}).map(&:from).uniq.count

你能直接构建一个数组而不是先将其转换为字符串吗?也许尝试这样的事情?

@calllist = []
@subaccount.calls.list({})each do |call|
  #"from" returns the phone number that called
  @calllist.push call.from
end

然后,您应该能够在@calllist上调用Uniq以将其缩短为唯一成员。

编辑:@subaccount.calls.list是什么类型的对象?

uniq应该用于创建唯一的字符串列表。我想你可能会被其他不相关的事情弄糊涂。你不需要.split,这是为了将单个字符串转换为单词字符串数组(默认按空格拆分)。它将每个数字字符串变成一个仅包含该数字的数组。您可能还会对在 irb 控制台中执行 each 调用感到困惑,即使您的内部循环执行了正确的操作,该控制台也会返回迭代的完整数组。请尝试以下操作:

unique_numbers = @subaccount.calls.list({}).map {|call| call.from }.uniq把unique_numbers.检查

最新更新