我有以下情况,我想得到一个没有大量循环和切片的通用解决方案。
首先:
我初始化 N
,通过它我计算列表大小(初始大小):
通过这个等式 N(N-1)/2
..
假设我设置了 N = 5
,因此初始大小将为 10
。
之后,我用一些方法用 1 和 0 填充列表。
像这样:
0 1 0 1 1 1 0 1 0 1
此列表根据 N 进行分段,其中分段为 (N-1)。
所以
- 第一段是:
0 1 0 1
- 第二段是:
1 1 0
- 第三段是:
1 0
- 第四段是:
1
[0 1 0 1] [1 1 0] [1 0] [1]
我想做的是,如果我再次输入任何数字作为输入 N:
通过适当的移位保持以前的数据
根据新的大小。例如如果 N=6 那么大小将是 15
所以我将有 5 个段而不是 4 个
我想要这样:
[0 1 0 1 0] [1 1 0 0] [1 0 0] [1 0] [0]
反之亦然如果我先输入 N = 7 并填充它。然后我输入 N = 4
我想做出正确的转变
最佳答案
有什么理由必须将它们放在一个列表中?看起来你在这里有一个 n 列表的列表,所以创建一个大小为 N 的列表,其中包含大小为 1 到 N 的列表。这样,当你增加 N 时,你只需将适当数量的 0 添加到每个列表并创建只有 0 的新列表。如果你减少 N 我不确定规则是什么但我怀疑通过比较你会删除适当数量的短列表,然后从其他列表中删除最后的元素。
就拥有单个数组列表而言,它不起作用,但我会说,它是存储您描述的数据的更好方法。无论如何,您始终可以很容易地从我描述的模型中获得扁平化列表...
关于c# - 如何移动列表中的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13289082/