【发布时间】:2019-07-01 14:47:15
【问题描述】:
有一个简短的列表。它的值无关紧要:
List<short> resultTemp = new List<short>{1,2,3,4,5,6,7,8,9...};
此代码应通过从中删除每个第 N 项来重用结果列表计数。
示例 1:
List<short>{1,2,3,4,5,6,7,8,9,10}.Count == 10;
var targetItemsCount = 5;
result 应该是 {1,3,5,7,9} 并且 result.Count 应该是 == 5
示例 2:
List<short>{1,2,3,4,5,6,7,8,9}.Count == 9;
var targetItemsCo:nt = 3;
result 应该是 {1,4,7} 并且 result.Count 应该是 == 3
但它应该停止删除它,在某处使结果计数等于 targetItemsCount(此代码中为 42,但其值无关紧要)。 代码是:
var currentItemsCount = resultTemp.Count;
var result = new List<short>();
var targetItemsCount = 42;
var counter = 0;
var counterResettable = 0;
if (targetItemsCount < currentItemsCount)
{
var reduceIndex = (double)currentItemsCount / targetItemsCount;
foreach (var item in resultTemp)
{
if (counterResettable < reduceIndex ||
result.Count + 1 == currentItemsCount - counter)
{
result.Add(item);
counterResettable++;
}
else
{
counterResettable = 0;
}
counter++;
}
}
并且这个例子中的resault.Count等于41,但应该是== targetItemsCount == 42;
如何删除 List 中的每个 N 项,直到 List.Count 多于 C# 的目标值?
【问题讨论】:
-
为什么你想这样做?当你调试通过它时,为什么它停在41而不是42?
-
所以N是
targetItemsCount?你能解释一下算法,而不是给出 3 个可能的输入和相应的输出,以免说第一个步骤吗? -
如果 targetItemsCount 大于源列表中的元素数怎么办?
-
@xdtTransform 我应该结合 2 个算法 1) 我应该从列表中删除元素,以防结果列表计数超过 targetItemsCount。 2)我可以通过只删除第一个或最后第 N 个项目来做到这一点,但是当我删除每个第 N 个元素时,结果会更平滑。
-
@schlonzo 它应该什么都不删除,“如果”将被跳过。