返回红宝石阵类似的元素 [英] Return similar elements of array in Ruby

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

问题描述

说我有这样的一个数组:

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

如果我想回到副本,(假设任何数组中的这些字符串是完全相同的,我只想

 收益arr.detect {| A | arr.count(a)及GT; 1}

但是,如果我想获得数组的每个元素的前10个字符的唯一副本,不知道事先的变化是什么?像这样的:

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


解决方案

这是该方法很简单哈利#区别我在我的答案的here

 改编<< 让我们添加一个字符串出现只是一次
  #=> [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,让我们增加]
B = a.difference(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"] 

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

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