C# 当循环变量的值是模式LetterNumberNumber的字符串时,用于循环?
我知道在循环变量为整数时使用循环。我强烈需要创建一个for循环,其中循环变量将取值A00,A01,…,A99,B00,B01,B99,…,Z99。是否允许使用混合模式作为C#中循环变量的值 在这种情况下,我们如何增加循环变量?我想做的事的草稿:C# 当循环变量的值是模式LetterNumberNumber的字符串时,用于循环?,c#,loops,C#,Loops,我知道在循环变量为整数时使用循环。我强烈需要创建一个for循环,其中循环变量将取值A00,A01,…,A99,B00,B01,B99,…,Z99。是否允许使用混合模式作为C#中循环变量的值 在这种情况下,我们如何增加循环变量?我想做的事的草稿: 对于(字符串i=A00,A01,…,Z99;???) {…} 如果我们不允许使用这样的值作为循环变量,那么可以做些什么来处理这种情况 有什么想法吗?您可以使用双循环构建列表: for (char c = 'A'; c <= 'Z'; c++) {
对于(字符串i=A00,A01,…,Z99;???)
{…} 如果我们不允许使用这样的值作为循环变量,那么可以做些什么来处理这种情况
有什么想法吗?您可以使用双循环构建列表:
for (char c = 'A'; c <= 'Z'; c++)
{
for (int i = 0; i < 100; i++)
{
string s = $"{c}{i:d2}";
}
}
根据您构造A00…Z99的逻辑,如果可能,您还可以从整数中构造字符串。你需要一些转换来完成你自己
for (int i = 0;;)
{
string s = ConvertIntergerToSpecial(i);
}
可以使用双循环构造列表:
for (char c = 'A'; c <= 'Z'; c++)
{
for (int i = 0; i < 100; i++)
{
string s = $"{c}{i:d2}";
}
}
根据您构造A00…Z99的逻辑,如果可能,您还可以从整数中构造字符串。你需要一些转换来完成你自己
for (int i = 0;;)
{
string s = ConvertIntergerToSpecial(i);
}
循环变量只能是一种类型,您可以将Int.Parse()
与子字符串或正则表达式结合使用:
using System.Text.RegularExpressions;
代码:
循环变量只能是一种类型,您可以将Int.Parse()
与子字符串或正则表达式结合使用:
using System.Text.RegularExpressions;
代码:
可以有两个叠瓦循环来返回字符串
例如:
public IEnumerable<string> GetLabels()
{
for (char l = 'a'; l < 'z'; l++)
{
for (int d = 0; d < 99; d++)
{
yield return string.Format("{0}{1:D2}", l, d);
}
}
}
public IEnumerable GetLabels()
{
for(字符l='a';l<'z';l++)
{
对于(int d=0;d<99;d++)
{
返回string.Format(“{0}{1:D2}”,l,d);
}
}
}
注意:收益率回报允许您拥有一个可枚举项,而无需一次构建整个组合。如果在Linq查询或foreach循环中使用,则将在需要值之前构建值。您可以有两个叠瓦循环来返回字符串
例如:
public IEnumerable<string> GetLabels()
{
for (char l = 'a'; l < 'z'; l++)
{
for (int d = 0; d < 99; d++)
{
yield return string.Format("{0}{1:D2}", l, d);
}
}
}
public IEnumerable GetLabels()
{
for(字符l='a';l<'z';l++)
{
对于(int d=0;d<99;d++)
{
返回string.Format(“{0}{1:D2}”,l,d);
}
}
}
注意:收益率回报允许您拥有一个可枚举项,而无需一次构建整个组合。如果在Linq查询或foreach循环中使用,值将在需要之前生成。和不可避免的Linq变量-您可以使用Linq和Enumerable生成字母和数字序列。范围,例如:
var maxLetters=3;
var maxNumbers=3;
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);
}
--------
A01
A02
A03
B01
B02
B03
C01
C02
C03
D01
D02
D03
字符相当于C#中的整数,这意味着您可以使用Enumerable.Range生成递增整数序列。Enumerable.Range将返回整数,这就是为什么需要转换回char
还可以通过从结束字母中减去起始字母来指定要使用的数字或字母,如所示:
一旦有了索引序列,就可以使用foreach
和不可避免的LINQ变量对其进行迭代-可以使用LINQ和Enumerable生成字母和数字序列。范围,例如:
var maxLetters=3;
var maxNumbers=3;
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);
}
--------
A01
A02
A03
B01
B02
B03
C01
C02
C03
D01
D02
D03
字符相当于C#中的整数,这意味着您可以使用Enumerable.Range生成递增整数序列。Enumerable.Range将返回整数,这就是为什么需要转换回char
还可以通过从结束字母中减去起始字母来指定要使用的数字或字母,如所示:
一旦你有了索引序列,你可以用foreach
对它进行迭代。我喜欢这里发布的关于这个问题的其他答案,特别是LINQ方法。这里有一个单循环的方法,只是外行的编程工具
String result = "";
char c = 'A';
String v = "";
for (int i = 0; v != "Z99"; i++) // Loop until you reach Z99
{
v = String.Format("{0}{1:D2}", c, i); // A00,A001.... Z99
if (i == 99) { i = 0; c++; } // Reset counter and increment character
result += v +" "; // Just to display the result
}
MessageBox.Show(result);
我喜欢这个问题的其他答案,特别是LINQ方法。这里有一个单循环的方法,只是外行的编程工具
String result = "";
char c = 'A';
String v = "";
for (int i = 0; v != "Z99"; i++) // Loop until you reach Z99
{
v = String.Format("{0}{1:D2}", c, i); // A00,A001.... Z99
if (i == 99) { i = 0; c++; } // Reset counter and increment character
result += v +" "; // Just to display the result
}
MessageBox.Show(result);
这将有2600个条目。这将有2600个条目。我正在尝试理解/确认您的解决方案。“产量”对我来说是新概念。我希望(当用户单击按钮时)A00,…,Z99成为windows窗体中文本框中的一个值,在我检查bool变量值时,该值将自动更改(无需手动输入):情境==函数(参数1,…,参数5,…)。参数5将取值A00,…,Z99,我将根据变量情况的值做一些工作。当然,文本框可能不需要。TextBox只是为了在后期限制扫描范围。@ErdoganCEVHER您所描述的根本不是一个循环。有关收益率回报/收益率中断的更多信息:@PanagiotisKanavos,我猜是这样的。但是,我想这样做,因为对这个问题的回答可能会揭示出我对这个问题的一般处理方式。我试图理解/确认你的解决方案。“产量”对我来说是新概念。我希望(当用户单击按钮时)A00,…,Z99成为windows窗体中文本框中的一个值,在我检查bool变量值时,该值将自动更改(无需手动输入):情境==函数(参数1,…,参数5,…)。参数5将取值A00,…,Z99,我将根据变量情况的值做一些工作。当然,文本框可能不需要。TextBox只是为了在后期限制扫描范围。@ErdoganCEVHER您所描述的根本不是一个循环。有关收益率回报/收益率中断的更多信息:@PanagiotisKanavos,我猜是这样的。但是,我想这样做,因为这个问题的答案可能会为我揭示对这个问题的一般处理。非常感谢。我成功地将您的解决方案嵌入到我的工作中。它工作得很好。我把maxLetters=26;在我的项目中,maxNumbers=99。我注意到您提供的代码遗漏了00s(A00,B00,…,Z00),但这并没有影响我的工作,因为后来我注意到