在Ruby中返回数组的类似元素 [英] Return similar elements of array in Ruby

查看:184
本文介绍了在Ruby中返回数组的类似元素的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

说我有这样一个数组:

  arr = ['footballs_jumba_10','footballs_jumba_11','soccers_jumba_12',
'footballs_jumba_14','alpha_romeo_11','alpha_romeo_12',
'alpha_juliet_10','alpha_juliet_11']

如果我想要返回重复项(假设数组中的这些字符串中的任何一个完全相同,我只需要

  return arr.detect {| a | arr.count(a)> 1} 

但是,如果我只想得到数组的每个元素的前10个字符的重复项,而不是事先知道变化,那么如下:

 code> ['footballs_','alpha_rome','alpha_juli'] 


解决方案

这是非常简单的方法 Arry#difference ,我提出在我的答案 here

  arr<< 我们添加一个只出现一次的字符串
#=> [footballs_jumba_10,footballs_jumba_11,footballs_jumba_12,
#footballs_jumba_14,alpha_romeo_11,alpha_romeo_12,
#alpha_juliet_10,alpha_juliet_11,只是一次]

a = arr.map {| s | s [0,10]}
#=> [footballs_,footballs_,footballs_,footballs_,alpha_rome,
#alpha_rome,alpha_juli,alpha_juli,Let's add]
b = a。差异(a.uniq)
#=> [footballs_,footballs_,footballs_,alpha_rome,alpha_juli]
b.uniq
#=> [footballs_,alpha_rome,alpha_juli]


Say I have such an array:

arr = ['footballs_jumba_10', 'footballs_jumba_11', 'footballs_jumba_12',
       'footballs_jumba_14', 'alpha_romeo_11', 'alpha_romeo_12',
       'alpha_juliet_10', 'alpha_juliet_11']

If I wanted to return duplicates, (assuming any of these strings in the array were exactly identical, I would just

return arr.detect{ |a| arr.count(a) > 1 }

but, what if I wanted to get only duplicates of the first 10 characters of each element of the array, without knowing the variations beforehand? Like this:

['footballs_', 'alpha_rome', 'alpha_juli']

解决方案

This is quite straightforward with the method Arry#difference that I proposed in my answer here:

arr << "Let's add a string that appears just once"
  #=> ["footballs_jumba_10", "footballs_jumba_11", "footballs_jumba_12",
  #    "footballs_jumba_14", "alpha_romeo_11", "alpha_romeo_12",
  #    "alpha_juliet_10", "alpha_juliet_11", "Let's add a string that appears just once"]

a = arr.map { |s| s[0,10] }
  #=> ["footballs_", "footballs_", "footballs_", "footballs_", "alpha_rome",
  #    "alpha_rome", "alpha_juli", "alpha_juli", "Let's add "] 
b = a.difference(a.uniq)
  #=> ["footballs_", "footballs_", "footballs_", "alpha_rome", "alpha_juli"] 
b.uniq
  #=> ["footballs_", "alpha_rome", "alpha_juli"] 

这篇关于在Ruby中返回数组的类似元素的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆