在对数组值使用 get/set 时如何环绕值(使用 `mod`)?
How to wrap around values (using `mod`) when using get/set for array values?
注意:我不想包装数组的索引,事实上,我已经这样做了。我还想在设置数组时 wrap the individual values。
我试图让数组值自动环绕而不使用 for 循环来执行此操作,因为我有一个相当大的数组(uint16 限制)。
我尝试使用 get/set 并在高于最大值或低于最小值时使用简单的换行代码。
有什么办法可以做到这一点吗?
我想要的:
MyArray[0] = 5
//MyArray's max is 3, and minimum is 0
结果:
MyArray[0] = 2
问题不在于looping around indices,而是将值缩小到一个有限的范围内。
我已经看到了如何实现索引器——比如 Example of Indexer and how to clamp value - Where can I find the "clamp" function in .NET?(有些甚至被建议为重复项)。
这有帮助吗?
using System;
public class ModArray
{
int [] _array;
int _mod;
public ModArray(int size, int mod){
_array = new int[size];
_mod = mod;
}
public int this[int index]
{
get => _array[index];
set => _array[index] = value % _mod;
}
}
public class Test
{
public static void Main()
{
var ma = new ModArray(10,3);
ma[0] = 5;
Console.WriteLine(ma[0]);
}
}
如果您可以更改设置值的方式,则只需使用 remainder
运算符(应该类似于 MyArray[0] = 5 % 3
)。
但如果不能,则必须将数组包装在 class 中(因为不能子 class 数组),类似于:
class MyArray
{
// Declare an array to store the data elements.
private uint16[] arr = new uint16[100];
// Define the indexer to allow client code to use [] notation.
public uint16 this[int i]
{
get { return arr[i]; }
set { arr[i] = value % 5; }
}
}
注意:我不想包装数组的索引,事实上,我已经这样做了。我还想在设置数组时 wrap the individual values。
我试图让数组值自动环绕而不使用 for 循环来执行此操作,因为我有一个相当大的数组(uint16 限制)。
我尝试使用 get/set 并在高于最大值或低于最小值时使用简单的换行代码。
有什么办法可以做到这一点吗?
我想要的:
MyArray[0] = 5
//MyArray's max is 3, and minimum is 0
结果:
MyArray[0] = 2
问题不在于looping around indices,而是将值缩小到一个有限的范围内。
我已经看到了如何实现索引器——比如 Example of Indexer and how to clamp value - Where can I find the "clamp" function in .NET?(有些甚至被建议为重复项)。
这有帮助吗?
using System;
public class ModArray
{
int [] _array;
int _mod;
public ModArray(int size, int mod){
_array = new int[size];
_mod = mod;
}
public int this[int index]
{
get => _array[index];
set => _array[index] = value % _mod;
}
}
public class Test
{
public static void Main()
{
var ma = new ModArray(10,3);
ma[0] = 5;
Console.WriteLine(ma[0]);
}
}
如果您可以更改设置值的方式,则只需使用 remainder
运算符(应该类似于 MyArray[0] = 5 % 3
)。
但如果不能,则必须将数组包装在 class 中(因为不能子 class 数组),类似于:
class MyArray
{
// Declare an array to store the data elements.
private uint16[] arr = new uint16[100];
// Define the indexer to allow client code to use [] notation.
public uint16 this[int i]
{
get { return arr[i]; }
set { arr[i] = value % 5; }
}
}