将数组列转换为ruby行

时间:2017-01-15 03:23:02

标签: arrays ruby transform

我有一个名为puzzle的数组数组,我正在尝试返回一个新数组,第一个数组由

组成
["a", "s", "i", "o", "s", "u", "z"] 

然后下一个数组由数组的第二个索引

组成
["k", "o", "t", "t", "e", "r", "s"]

等等。有什么好方法可以做到这一点。我正在考虑使用地图和两个计数器,但无法让它们在不同的时间运行或增加。任何帮助都是极好的。谢谢!

我想从此puzzle返回一个新数组:

puzzle = [
  ["a", "k", "f", "o", "x", "e", "s"],
  ["s", "o", "a", "w", "a", "h", "p"],
  ["i", "t", "c", "k", "e", "t", "n"],
  ["o", "t", "s", "d", "h", "o", "h"],
  ["s", "e", "x", "g", "s", "t", "a"],
  ["u", "r", "p", "i", "w", "e", "u"],
  ["z", "s", "b", "n", "u", "i", "r"]
]

2 个答案:

答案 0 :(得分:5)

Array#transpose适合您:

puzzle = [
  ["a", "k", "f", "o", "x", "e", "s"],
  ["s", "o", "a", "w", "a", "h", "p"],
  ["i", "t", "c", "k", "e", "t", "n"],
  ["o", "t", "s", "d", "h", "o", "h"],
  ["s", "e", "x", "g", "s", "t", "a"],
  ["u", "r", "p", "i", "w", "e", "u"],
  ["z", "s", "b", "n", "u", "i", "r"]
]
puzzle.transpose
# => [["a", "s", "i", "o", "s", "u", "z"],
#  ["k", "o", "t", "t", "e", "r", "s"],
#  ["f", "a", "c", "s", "x", "p", "b"],
#  ["o", "w", "k", "d", "g", "i", "n"],
#  ["x", "a", "e", "h", "s", "w", "u"],
#  ["e", "h", "t", "o", "t", "e", "i"],
#  ["s", "p", "n", "h", "a", "u", "r"]]

答案 1 :(得分:0)

public class RobotController: MonoBehaviour
{
    public float maxSpeed = 2f;
    //a boolean value to represent whether we are facing left or not
    bool facingLeft = true;
    //a value to represent our Animator
    Animator anim;

    //Declare rigid2D
    Rigidbody rigid2D;
    // Use this for initialization
    void Start()
    {
        //set anim to our animator
        anim = GetComponent<Animator>();

        //Initialize rigid2D
        rigid2D = GetComponent<Rigidbody>();
    }

    // Update is called once per frame
    void FixedUpdate()
    {

        float move = Input.GetAxis("Horizontal");//Gives us of one if we are moving via the arrow keys
                                                 //move our Players rigidbody
        rigid2D.velocity = new Vector3(move * maxSpeed, rigid2D.velocity.y);
        //set our speed
        anim.SetFloat("Speed", Mathf.Abs(move));
        //if we are moving left but not facing left flip, and vice versa
        if (move < 0 && !facingLeft)
        {

            Flip();
        }
        else if (move > 0 && facingLeft)
        {
            Flip();
        }
    }

    //flip if needed
    void Flip()
    {
        facingLeft = !facingLeft;
        Vector3 theScale = transform.localScale;
        theScale.x *= -1;
        transform.localScale = theScale;
    }
}

或者如果你不需要变种器......

class Array def my_transpose! size.times do |i| 0.upto(i) do |j| # iterate only through lower half self[i][j], self[j][i] = self[j][i], self[i][j] # swap rows and cols end end self # return the array itself end def my_transpose dup.map(&:dup).my_transpose! # inner arrays are dup'ed, too end end 方法然后使用.transpose

选择所需的数组
[]

[0]说给我第一个结果。

puzzle.transpose[0]