如何从Ruby中的数组元素创建组合数组

如何从Ruby中的数组元素创建组合数组,ruby,arrays,Ruby,Arrays,我有以下数组 @arr = ["A:c,b,a", "B:a,b,d", "C:a,c,b", "D:d,a,c", "a:A,C,D", "b:D,A,B", "c:B,A,C", "d:D,C,A"] 我想创建一个组合了字母before:和before:的数组 输出 ["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 = ["A:c,b,a", "B:a,b,d", "C:a,c,b", "D:d,a,c", "a:A,C,D", "b:D,A,B", "c:B,A,C", "d:D,C,A"] 
我想创建一个组合了字母before:和before:的数组

输出

["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.each { |item| name, choices =item.split(':')
            @names<<name
            @choices<<choices.strip
}
@combi = @name.product(@choices)
soshisoai.txt 是的,您可以使用:

代码

@arr.map { |str| lead, rest = str.split(':');
  [lead].product(rest.split(',')).map(&:join).join(',') } 
解释

@arr = ["A:c,b,a", "B:a,b,d", "C:a,c,b", "D:d,a,c",
        "a:A,C,D", "b:D,A,B", "c:B,A,C", "d:D,C,A"]
map
首先将
“A:c,b,A”
传递到块,并将其分配给块变量:

str = "A:c,b,a"
lead, rest = str.split(':')
  #=> ["A", "c,b,a"]
所以
lead=>“A”
rest=>“c,b,A”

所以

@arr
的每个其他元素执行类似计算后,我们得到:

@arr.map { |str| lead, rest = str.split(':');
  [lead].product(rest.split(',')).map(&:join).join(',') } 
  #=> ["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 { |str| lead, rest = str.split(':');
  [lead].product(rest.split(',')).map(&:join).join(',') } 
解释

@arr = ["A:c,b,a", "B:a,b,d", "C:a,c,b", "D:d,a,c",
        "a:A,C,D", "b:D,A,B", "c:B,A,C", "d:D,C,A"]
map
首先将
“A:c,b,A”
传递到块,并将其分配给块变量:

str = "A:c,b,a"
lead, rest = str.split(':')
  #=> ["A", "c,b,a"]
所以
lead=>“A”
rest=>“c,b,A”

所以

@arr
的每个其他元素执行类似计算后,我们得到:

@arr.map { |str| lead, rest = str.split(':');
  [lead].product(rest.split(',')).map(&:join).join(',') } 
  #=> ["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.each_with_object([]){e,o | lhsStr,rhsStr=e.split(“:”);
o[“交流、交流、交流、交流”、“交流、交流、交流、交流”、“交流、交流”、“交流、交流、交流”,
“aA、aC、aD”、“bD、bA、bB”、“cB、cA、cC”、“dD、dC、dA”]
@arr.each_with_object([]){e,o | lhsStr,rhsStr=e.split(“:”);
o[“交流、交流、交流、交流”、“交流、交流、交流、交流”、“交流、交流”、“交流、交流、交流”,
“aA、aC、aD”、“bD、bA、bB”、“cB、cA、cC”、“dD、dC、dA”]

您遇到的错误是什么?您遇到的错误是什么?
a = ["A"].product(["c", "b", "a"])
  #=> [["A", "c"], ["A", "b"], ["A", "a"]]

b = a.map(&:join)
  #=> ["Ac", "Ab", "Aa"]  

b.join(',')
  #=> "Ac,Ab,Aa"
@arr.map { |str| lead, rest = str.split(':');
  [lead].product(rest.split(',')).map(&:join).join(',') } 
  #=> ["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.each_with_object([]){|e, o| lhsStr, rhsStr = e.split(":");
o << rhsStr.split(",").map{|c| lhsStr + c}.join(",")}

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