我需要以下代码的帮助。我有一个数组,该数组中的每个3
元素跳过。该代码适用于数组的 indexes 。
带有-----的部分必须填充一些代码。
有人可以帮助我吗? 我有以下代码:
我尝试过这个。
static int[] SkipEvery(int[] numbers,int skip)
{
int[] skipped = new int[numbers.Length];
for (int i = 0; i < numbers.Length; i++)
{
if ((numbers[i]) % (skip + 1) == 0)
{
skipped[i] = numbers[i];
}
else
{
skipped[i] = numbers[i];
}
}
return skipped;
}
public static void Main(string[] args)
{
int[] numbers = new int[] { 7, 2, 24, 69, 101, 42, 84, 100, 72 };
numbers = SkipEvery(numbers, 3);
}
输出必须为
[0]7 [1]2 [2]24 [3]-1 [4]101 [5]42 [6]84 [7]-1 [8]72
但是使用此代码,输出为
[0]7 [1]2 [2]24 [3]69 [4]101 [5]42 [6]84 [7]100 [8]72
答案 0 :(得分:1)
您可以尝试使用 Linq 来过滤出项目并创建一个 new 数组:
int[] numbers = new int[] { 7, 2, 24, 69, 101, 42, 84, 100, 72 };
int[] skipped = numbers
.Select((item, index) => (index + 1) % 4 != 0 ? item : -1)
.ToArray();
如果您要修改 existing 数组,则只需执行一个简单循环即可
for (int i = 3; i < numbers.Length; i += 4)
numbers[i] = -1;
最后,让我们看一下结果(skipped
):
string report = string.Join(" ", skipped
.Select((item, index) => $"[{index}]{item}"));
Console.Write(report);
结果:
[0]7 [1]2 [2]24 [3]-1 [4]101 [5]42 [6]84 [7]-1 [8]72
编辑:您当前的代码已修改:
static int[] SkipEvery(int[] numbers, int skip) {
int[] skipped = new int[numbers.Length];
for (int i = 0; i < numbers.Length; i++) {
if ((i + 1) % (skip + 1) == 0) { // check indexes - i, not values - numbers[i]
skipped[i] = -1; // well, you have to skip!
}
else {
skipped[i] = numbers[i];
}
}
return skipped;
}
答案 1 :(得分:0)
答案 2 :(得分:0)
扩展方法如何:
public static class Extensions
{
public static T[] ReplaceEvery<T>(this T[] values, int every, T replacement)
{
return values.Select( (x,i) => (((i+1)%every) == 0) ? replacement : x).ToArray();
}
}
用法:
int[] numbers = new int[] { 7, 2, 24, 69, 101, 42, 84, 100, 72 };
var result = numbers.ReplaceEvery(3,-1);
Console.WriteLine(String.Join(",",result));
//output: 7,2,-1,69,101,-1,84,100,-1
答案 3 :(得分:0)
您可以跳过每个元素,并使用yield return
将值返回给调用者。
static IEnumerable<int> SkipEvery(int[] numbers, int skip)
{
for (int i = 1; i <= numbers.Length; i++)
{
if ((i % (skip + 1)) != 0)
yield return numbers[i - 1];
else
yield return -1;
}
}
static void Main(string[] args)
{
int[] numbers = new int[] { 7, 2, 24, 69, 101, 42, 84, 100, 72 };
string result = string.Join("\t", SkipEvery(numbers, 3).Select((x, i) => $"[{i}]{x}"));
Console.WriteLine(result);
}
输出:
[0]7 [1]2 [2]24 [3]-1 [4]101 [5]42 [6]84 [7]-1 [8]72