Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从字符串列表中删除重复项(Twilio调用-Ruby的输出)_Ruby_Arrays_String_Twilio - Fatal编程技术网

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

从字符串列表中删除重复项(Twilio调用-Ruby的输出),ruby,arrays,string,twilio,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.l

我试图显示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
然而,我真的很难弄清楚如何显示唯一的呼叫(人们有时从同一个号码回电话,我只想从同一个号码数一次)。我认为这是一个相当简单的方法,但我已经花了好几个小时试图弄明白它(仍然是一个ruby noob)

目前我在控制台中的工作如下:

@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”,我也尝试过“扁平化”


请开导我!谢谢

是否可以直接构建数组而不是先将其转换为字符串?试试这样的吧

@calllist = []
@subaccount.calls.list({})each do |call|
  #"from" returns the phone number that called
  @calllist.push call.from
end
然后,您应该能够在@calllist上调用uniq,将其缩短为唯一的成员


编辑:究竟是哪种类型的对象@subaccount.calls.list?

如果您拥有的是一个字符串,您希望对其进行操作,则以下操作有效:

%{+13304833615+13304833615+13304833615+13304835615+13304833615+13304833615+13304833615+13304833615}.split(“+”).uniq.reject{| x | x.empty?}.count =>2

但这更为理想:

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

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

unique_numbers = @subaccount.calls.list({}).map {|call| call.from }.uniq puts unique_numbers.inspect unique|u numbers=@subaccount.calls.list({}).map{| call | call.from}.uniq 放入唯一的\u编号。检查
你明白了。非常感谢你。除了(&:from)之外,我在该行中获得了所有内容。我知道地图正在创建一个新数组,但你要传递什么?如果这是一个很长的解释,你能告诉我你会怎么称呼它,这样我就可以研究它了吗?我想确保我完全理解这一点。再次感谢!(&:from)被称为symbol to proc,ruby接受:from并将其转换为一个proc对象,该对象在数组的每个成员上都被调用,以便更好地解释这一点。谢谢你的回答!我不确定当两个答案都能正常工作时,哪一个是可接受的答案,我还不知道哪一个是“最佳实践”(假设其中一个比另一个好)。另一个是第一个,所以我做了标记。