gpt4 book ai didi

c# - 将 Int[] 数组添加到 List

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:00:11 24 4
gpt4 key购买 nike

我在处理 int[] 数组并将它们添加到 List<> 时遇到问题。我想将我的 int[] 数组的值添加到每个循环的某物中,但每次我这样做时,我的“某物”都会为我添加的每个元素获得相同的值。很烦人。我知道数组总是引用变量。然而,即使是"new"关键字似乎也无济于事。需要做的是将结果添加到某个枚举对象,如 List 或 Array 或 ArrayList。

这里是可乐性问题:

你有 N 个计数器,初始设置为 0,你可以对它们进行两种可能的操作:

  • increase(X) - 计数器 X 增加 1,
  • max_counter - 所有计数器都设置为任何计数器的最大值。

给出了一个由 M 个整数组成的非空零索引数组 A。这个数组代表连续的操作:

  • 如果 A[K] = X,使得 1 ≤ X ≤ N,则操作 K 为 increase(X),
  • 如果 A[K] = N + 1 则操作 K 是 max_counter。

例如,给定整数 N = 5 和数组 A 使得:

A[0] = 3
A[1] = 4
A[2] = 4
A[3] = 6
A[4] = 1
A[5] = 4
A[6] = 4

每次连续操作后计数器的值将是:

(0, 0, 1, 0, 0)
(0, 0, 1, 1, 0)
(0, 0, 1, 2, 0)
(2, 2, 2, 2, 2)
(3, 2, 2, 2, 2)
(3, 2, 2, 3, 2)
(3, 2, 2, 4, 2)

目标是计算所有操作后每个计数器的值。

我从其他人那里复制了一些代码,变量“result”确实正确加载了数据。我只是想将它复制回主程序以便我可以看到它。唯一有效的方法是 += 将其添加到字符串中。因此失去了我可能获得的任何效率。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace testarray
{
class Program
{
static void Main(string[] args)
{
int[] A = new int[7];
A[0] = 3;
A[1] = 4;
A[2] = 4;
A[3] = 6;
A[4] = 1;
A[5] = 4;
A[6] = 4;
List<int[]> finish = solution(5, A);

}
public static List<int[]> solution(int N, int[] A)
{
int[] result = new int[N];
int maximum = 0;
int resetlimit = 0;
int iter = 0;
List<int[]> collected_result = new List<int[]>;

for (int K = 0; K < A.Length; K++)
{
if (A[K] < 1 || A[K] > N + 1)
{
throw new InvalidOperationException();
}

if (A[K] >= 1 && A[K] <= N)
{
if (result[A[K] - 1] < resetlimit)
{
result[A[K] - 1] = resetlimit + 1;
}
else
{
result[A[K] - 1]++;
}

if (result[A[K] - 1] > maximum)
{
maximum = result[A[K] - 1];
}
}
else
{
resetlimit = maximum;
result = Enumerable.Repeat(maximum, result.Length).ToArray<int>();

}

collected_result.Add(result);

}
// for (int i = 0; i < result.Length; i++)
//result[i] = Math.max(resetLimit, result[i]);

return collected_result;
}

}
}

这行不通,collected_result 最终像这样:

(0,0,1,2,0)
(0,0,1,2,0)
(0,0,1,2,0)
(3,2,2,4,2)
(3,2,2,4,2)
(3,2,2,4,2)
(3,2,2,4,2)

我知道这是 collected_result.Add(result); 这行每次都将引用添加到 List<> 中结果的每个实例。打扰。我试过添加"new",这是一个编译器错误。最后无奈之下,我只是将所有内容添加到一个很长的字符串中。有人可以帮我弄清楚如何正确加载对象以传递回 main 吗?

最佳答案

最简单的方法:

在将数组添加到列表之前获取数组的副本:

collected_result.Add(result.ToArray());

关于c# - 将 Int[] 数组添加到 List<int[]>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23718723/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com