- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我有一个关于遍历字母表的问题。我想要一个以“a”开头并以“z”结尾的循环。之后,循环开始“aa”并计数到“az”。之后从“ba”开始到“bz”等等......
有人知道一些解决方案吗?
编辑:我忘了我给函数一个字符“a”然后函数必须返回b。如果你给“bnc”那么函数必须返回“bnd”
最佳答案
首先尝试 a-z 然后 aa-zz
public static IEnumerable<string> GetExcelColumns()
{
for (char c = 'a'; c <= 'z'; c++)
{
yield return c.ToString();
}
char[] chars = new char[2];
for (char high = 'a'; high <= 'z'; high++)
{
chars[0] = high;
for (char low = 'a'; low <= 'z'; low++)
{
chars[1] = low;
yield return new string(chars);
}
}
}
请注意,这将在“zz”处停止。当然,就循环而言,这里有一些丑陋的重复。幸运的是,这很容易修复 - 而且它还可以更加灵活:
第二次尝试:更灵活的字母表
private const string Alphabet = "abcdefghijklmnopqrstuvwxyz";
public static IEnumerable<string> GetExcelColumns()
{
return GetExcelColumns(Alphabet);
}
public static IEnumerable<string> GetExcelColumns(string alphabet)
{
foreach(char c in alphabet)
{
yield return c.ToString();
}
char[] chars = new char[2];
foreach(char high in alphabet)
{
chars[0] = high;
foreach(char low in alphabet)
{
chars[1] = low;
yield return new string(chars);
}
}
}
现在,如果您只想生成 a、b、c、d、aa、ab、ac、ad、ba...,您可以调用 GetExcelColumns("abcd")
。
第三次尝试(进一步修改)——无限序列
public static IEnumerable<string> GetExcelColumns(string alphabet)
{
int length = 0;
char[] chars = null;
int[] indexes = null;
while (true)
{
int position = length-1;
// Try to increment the least significant
// value.
while (position >= 0)
{
indexes[position]++;
if (indexes[position] == alphabet.Length)
{
for (int i=position; i < length; i++)
{
indexes[i] = 0;
chars[i] = alphabet[0];
}
position--;
}
else
{
chars[position] = alphabet[indexes[position]];
break;
}
}
// If we got all the way to the start of the array,
// we need an extra value
if (position == -1)
{
length++;
chars = new char[length];
indexes = new int[length];
for (int i=0; i < length; i++)
{
chars[i] = alphabet[0];
}
}
yield return new string(chars);
}
}
使用递归可能是更简洁的代码,但效率不高。
注意,如果你想在某个点停止,你可以只使用 LINQ:
var query = GetExcelColumns().TakeWhile(x => x != "zzz");
“重新启动”迭代器
要从给定点重新启动迭代器,您确实可以按照 thesoftwarejedi 的建议使用 SkipWhile
。当然,这是相当低效的。如果您能够在调用之间保持任何状态,则可以只保留迭代器(对于任一解决方案):
using (IEnumerator<string> iterator = GetExcelColumns())
{
iterator.MoveNext();
string firstAttempt = iterator.Current;
if (someCondition)
{
iterator.MoveNext();
string secondAttempt = iterator.Current;
// etc
}
}
或者,您也可以构造代码以使用 foreach
,只需突破您实际可以使用的第一个值即可。
关于c# - 遍历字母表 - C# a-caz,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1011732/
如何确定字符串是否只包含字母,而我想要的只是 [a-zA-Z]+,那么有什么方法可以通过区域设置确定字母吗? 最佳答案 Character类具有诸如 isLetter 之类的方法它将能够确定一个字符是
有没有更简单的方法将非 html 字母转换为 html 字母?例如,如果我执行 function("a") 它将返回 "a" 我知道如何执行此操作的唯一方法是: def function(text)
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 6 年前。 Improve this ques
这是我希望用字母表添加到我的 UITableView 的改进: 如果我的表中没有不以字母之一开头的结果,我不想在我的 UITableView 中看到这个 titleForHeaderInSection
我有以下代码,可将16位整数的流数据转换为无符号8位整数。 我希望将它们转换为按字母顺序排列的数据值并查看它们包含的内容。 #include int main() { FILE
我目前正在构建一个基于 icu4j 的音译 Web 界面。自动检测用户输入查询的脚本系统的最佳方式是什么? 例如如果输入是 body 里或 عالمتاب 我如何/应该识别它来自哪个脚本系统? 最佳答
字母表(及其索引)可以在这里找到: http://www.garykessler.net/library/base64.html 有没有比 alphabet = ['A','B',...] 更短的方式
为了在 Android 模拟器上显示 Tifinagh 字符,我尝试了这个方法: TextView tv=(TextView)findViewById(R.id.font); Typeface fac
有没有办法使用 Perl '..' 运算符创建 UTF-8 字母数组? 例如,这个是行不通的: $ cat t.pl #!/usr/bin/perl use Data::Dumper; use enc
字母表“a,b,c”上具有相同数量的子串“ab”和“ba”的所有字符串的语言是否是正则的? 我认为答案是否定的,但是很难对其进行正式演示,甚至是非正式演示。 关于如何解决这个问题有什么想法吗? 最佳答
我正在编写一个处理基因序列的程序,我想将每个核苷酸存储在一个字节中,其中每个位代表基因字母表 A,C,G,T 中的一个字母(显然只有一半的比特会被使用)。 我的编码如下: A = 0b1000 C =
所以,我想构建一个正则表达式,我可以传入一个由 0 和 1 组成的字符串(例如“0010101000111100100011110001101100011”),然后确保对于每 6 个连续字符,其中至少
我是一名优秀的程序员,十分优秀!