我有以下数组。
@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]}
答案 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
适用于此。