如何在c#中讲授不规则的Enumerable课程
本文关键字:不规则 Enumerable 课程 | 更新日期: 2023-09-27 18:15:51
Panagiotis Kanavos介绍了以下聪明的解决方案来产生LetterNumberNumber模式在这个sofsofquestion: For循环时,循环变量的值是一个字符串的模式LetterNumberNumber?
var maxLetters=3; // Take 26 for all letters
var maxNumbers=3; // Take 99 for all the required numbers
var values=from char c in Enumerable.Range('A',maxLetters).Select(c=>(char)c)
from int i in Enumerable.Range(1,maxNumbers)
select String.Format("{0}{1:d2}",(char)c,i);
foreach(var value in values)
{
Console.WriteLine(value);
}
A01A02A03B01B02B03C01二氧化碳C03D01D02D03
有办法在可数的东西上指导不定期课程吗?"可点数的。Range(1, maxNumbers)" leading 01, 02,…",99(对于maxnumber99)。
限制例子:
1. 限制(99年01、02、……)只(01、03、05、07年09年11、13)
2. 限制(99年01、02、……)只(02、04、06、08年10)
3.limit(01,02,…,99)only to (01,04,09,10)
我做了什么:
我用了"enumerable",尝试了它的方法:Enumerable.Contains(1,3,5,7,9,13)给出了很大的错误,我无法达到:
A01, a03, a05, ....,Z09, Z11, Z13.
如果enumable不适合这种类型的工作,你会提供什么来处理这个问题?
这不是c#的直接特性,而在f#中有。
f#的例子:[1..2..10]
将生成一个包含[1,3,5,7,9]的列表。
你的第一个例子,"Restrict(01,02,…,99)only to(01,03,05,07,09,11,13)"可以用
实现Enumerable.Range(1,99).Where(x => x % 2 == 1).Take(7);
第二个示例"Restrict(01,02,…,99)only to(02,04,06,08,10)"可以通过
实现。Enumerable.Range(1,99).Where(x => x % 2 == 0).Take(5);
第三个例子"Restrict(01,02,…,99)only to(01,04,09,10)"看起来很奇怪。我不确定这里的模式是什么。如果最后一个元素不是打字错误,那么从1开始,然后加3,然后加5,然后加1似乎不清楚,但这里有一个方法可以完成它。
public static IEnumerable<int> GetOddMutation(int start, int max, int count, List<int> increments) {
int counter = 0;
int reset = increments.Count - 1;
int index = 0;
int incremented = start;
while(counter < count) {
var previous = incremented;
incremented += increments[index];
index = index == reset ? 0 : index + 1;
counter++;
if(previous != incremented) //Avoid duplicates if 0 is part of the incrementation strategy. Alternatively, call .Distinct() on the method.
yield return incremented;
}
}
与 被称为
GetOddMutation(1,99,4, new List<int> {0,3,5,1})
将导致[1,4,9,10]
在我看来,您希望Enumerable.Range(1, maxNumbers)
受到某个条件的限制,而不是拥有所有的整数。由于Enumerable.Range()
产生IEnumerable<int>
,您可以链接任何LINQ过滤方法调用,即Enumerable.Where()
方法。例如,Enumerable.Range(1, 99).Where(x => x % 3 == 0)
将生成(3,6,9,…99)。
如果你只想要列表中只包含(1,3,5,7,9,13)的特定情况,你可以简单地用所需的数字创建一个列表:new List<int> {1,3,5,7,9,13}
;您也可以使用Enumerable.Range(1, maxNumbers).Where(x => x % 2 == 1)
和maxNumbers = 13
。