面试问题 - 如何使用不同的起点循环数组?

aro*_*ron 3 c# arrays

假设你有字符串"这是一个测试"

我将它传递给方法zee,就像("这是一个测试",1)并且想要"测试这是一个";

我将它传递给方法zee,就像("这是一个测试",2)并且想要"测试这是";

数字可以超过变量中的总字数.如果它确实应该循环.

我开始......

public static string zee(string origString, int i)
{
    StringBuilder sb = new StringBuilder();

    ArrayList list = new ArrayList();
    list.AddRange(origString.Split(' '));

    // not sure here - 
    for (int c = i; c < (list.Count + i); c++)
    {
        sb.AppendFormat("{0} ", list[c]);
    }

    return sb.ToString();
}
Run Code Online (Sandbox Code Playgroud)

Mik*_*lin 5

for(int j=0; j < list.length; j++){
    int idx = (j + i) % list.length;
    sb.AppendFormat("{0} " , list[idx]);
}
Run Code Online (Sandbox Code Playgroud)

大多数情况下像布伦特阿里亚斯的解决方案,但我认为for循环更具可读性,不太可能变得无限.

    public static string zee(string origString, int i)
    {
        StringBuilder sb = new StringBuilder();

        List<string> list = new List<string>();
        list.AddRange(origString.Split(' '));

        for (int j = 0; j < list.Count; j++)
        {
            int idx = (j + i) % list.Count;
            sb.AppendFormat("{0} ", list[idx]);
        }
        return sb.ToString();
    }
Run Code Online (Sandbox Code Playgroud)