使阵列像圆一样工作
本文关键字:一样 工作 阵列 | 更新日期: 2023-09-27 18:22:23
我不太确定如何做到这一点。
伪代码:
array1 = {"a","b", "c", "d", "e","f", "g","h", "i","j"} //there might be more values.
take c
loop =>c+3 =f
f+3 =i
i+3 =b
b+3 =e
......
end loop
我需要将这个array1
作为一个圆,并找到添加3(f、I、b、e等)的字母。
使用mod(%
),则index
可以是任何正值,并且它将环绕:
int index;
array1[index % array1.Length]
您需要自己编写"查找添加3的字母"函数,如:
new_index = (current_index+3)%length_of_array
正如其他答案所说,%
运算符是实现它的关键。
private string[] strings = { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j" };
private IEnumerable<string> GetStringWrapped(int position)
{
int current = position - 1;
while (true)
{
yield return strings[current];
current += position;
current %= strings.Length;
}
}
将其用作
void SomeMethod()
{
var resultArray = GetStringWrapped(3).Take(5).ToArray();
//resultArray contains c,f,i,b,e
}
注意Take
很重要,否则您的方法将永远不会结束,它将永远循环。
我们可以使用%
运算符来计算数组中的循环索引,然后我们可以将其抽象到类中
class CircularList<T> : List<T>
{
public new T this[int index]
{
get { return base[index%Count]; }
set { base[index%Count] = value; }
}
public T this[T item, int distance]
{
get
{
var index = IndexOf(item);
return this[index + distance];
}
set
{
var index = IndexOf(item);
this[index + distance] = value;
}
}
}
用法:
var arr = new CircularList<string> { "a", "b", "c", "d", "e", "f", "g", "h", "i", "j" };
var b = arr[8 + 2];
var b2 = arr["i", 2];