如何在Ruby中选择每个数组的子串

时间:2014-04-06 21:51:46

标签: ruby

我有以下数组。

@arr = ["Ac,Ab,Aa", "Ba,Bb,Bd", "Ca,Cc,Cb", "Dd,Da,Dc", "aA,aC,aD", "bD,bA,bB", "cB,cA,cC", "dD,dC,dA"]

现在我想提取每个项目的前两个字母。

@firsttwo = ["Ac", "Ba", "Ca", "Dd", "aA", "bD", "cB", "dD"]

我如何在Ruby中实现这一目标。

我尝试了这个,但它没有用。

    @firsttwo = @combi.select{ |item| item[0, 1]}

2 个答案:

答案 0 :(得分:3)

您需要使用Array#map

@arr = ["Ac,Ab,Aa", "Ba,Bb,Bd", "Ca,Cc,Cb", "Dd,Da,Dc", "aA,aC,aD", "bD,bA,bB", "cB,cA,cC", "dD,dC,dA"]
@arr.map { |item| item[0..1] }
# => ["Ac", "Ba", "Ca", "Dd", "aA", "bD", "cB", "dD"]
如果 block 返回#select

true会从接收器中选择该元素。现在,在您的情况下item[0..1]在每次迭代中给出一个字符串对象,该对象具有 truthy 值,因此#select选择接收器中的所有元素。< / p>

答案 1 :(得分:0)

试试这个:

@firsttwo = @arr.map { |item| item.split(",")[0] }

您目前正在使用select。这将返回一个集合,其中每次迭代都返回true。您似乎想要在集合的每个成员上执行相同的操作而不进行任何测试。 .map适用于此。