我的价目表为
10
21
30
90
100
150
400
我想以低于100的10增量添加价格。高于100以100的增量显示价格
所以我的最终价格清单会是
10
20
30
40
50
60
70
80
90
100
200
300
400
有没有人做过类似的事情。任何帮助或建议,将不胜感激。
提前感谢
我相信以下程序可以根据您的需要进行工作:
using System;
using System.Linq;
namespace csharp
{
class Program
{
static void Main(string[] args)
{
var prices = new int[]{10, 21, 30, 90, 100, 150, 400}.ToList();
var finalPriceList =
Enumerable
.Range(0, 10)
.Select(i => prices.Min() + 10 * i)
.TakeWhile(i => i < Math.Min(100, prices.Max()))
.Concat(
Enumerable
.Range(1, 1000)
.Select(i => 100 * i)
.TakeWhile(i => i <= prices.Max())
).ToList();
Console.WriteLine(string.Join(", ", finalPriceList));
}
}
}
它打印:
10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 200, 300, 400
关于是否要生成'n'个元素或是否要生成直到列表中的最大值尚不明确。
情况1:如果生成直到列表中的最大值
public IEnumerable<int> Generate(int maxValue)
{
var currentValue = 0;
while(currentValue<maxValue)
{
currentValue += currentValue < 100 ? 10:100;
yield return currentValue;
}
}
您现在可以将方法用作
var myList = new List<int>(new int[] { 12, 21, 30, 90, 100, 150, 404 });
var result = Generate(myList.Max());
情况2:当您要生成N个元素时。
var initialValue = 0;
var list = Enumerable.Range(1,totalNumberOfExpectedItems)
.Select(x=>
{
initialValue = initialValue < 100 ? initialValue + 10 : initialValue + 100;
return initialValue;
})
Enumerable.Range有助于在指定范围内生成序列
对于totalNumberOfExpectedItems = 13
,
输出
10
20
30
40
50
60
70
80
90
100
200
300
400
尝试一下...
我假设您正在获得列表中最低值和最高值之间的所有值。
List<int> myList = new List<int>(new int[] { 12, 21, 30, 90, 100, 150, 404 });
int max = myList.Max() - myList.Max() % 100;
int min = myList.Min() - myList.Min() % 10;
int tmp = (int)Math.Round(Math.Log10(min), MidpointRounding.ToZero);
List<int> newList = new List<int>();
for (int a = tmp, b = min / (int)Math.Pow(10, tmp); (Math.Pow(10, a) * b <= max); )
{
newList.Add((int)(Math.Pow(10, a) * b));
if (b < 9) b++;
else
{
b = 1;
a++;
}
}
//newList : [10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 200, 300, 400]