我的价目表为
10
21
30
90
100
150
400
我想以低于100的10增量添加价格。高于100以100的增量显示
所以我的最终价格清单会是
10
20
30
40
50
60
70
80
90
100
200
300
400
任何人都做了类似的事情。任何帮助或建议,将不胜感激。
预先感谢
我的价目表为
10
21
30
90
100
150
400
我想以低于100的10增量添加价格。高于100以100的增量显示
所以我的最终价格清单会是
10
20
30
40
50
60
70
80
90
100
200
300
400
任何人都做了类似的事情。任何帮助或建议,将不胜感激。
预先感谢
对于要生成'n'个元素还是要生成直到列表中的最大值,有些不清楚。
情况1:如果生成直到列表中的最大值
http://players.brightcove.net/pages/v1/index.html?accountId=6021289027001&playerId=default&videoId=6075281345001&mode=iframe
您现在可以将方法用作
public IEnumerable<int> Generate(int maxValue)
{
var currentValue = 0;
while(currentValue<maxValue)
{
currentValue += currentValue < 100 ? 10:100;
yield return currentValue;
}
}
案例2:当您要生成N个元素时。
var myList = new List<int>(new int[] { 12,21,30,90,100,150,404 });
var result = Generate(myList.Max());
Enumerable.Range有助于在指定范围内生成序列
对于var initialValue = 0;
var list = Enumerable.Range(1,totalNumberOfExpectedItems)
.Select(x=>
{
initialValue = initialValue < 100 ? initialValue + 10 : initialValue + 100;
return initialValue;
})
,
输出
totalNumberOfExpectedItems = 13
,
我相信以下程序可以按您的意愿工作:
using System;
using System.Linq;
namespace csharp
{
class Program
{
static void Main(string[] args)
{
var prices = new int[]{10,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,40,50,60,70,80,200,300,400
,
尝试一下...
我假设您正在获取列表中最低值和最高值之间的所有值。
List<int> myList = new List<int>(new int[] { 12,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,400]