如何在两个字母之间获得一系列字母

时间:2017-05-03 14:24:51

标签: c# unicode char

这是我如何获得两个字母之间的英文字母序列,但它只适用于英语。有人知道我怎么能做同样的事情,但对于俄语字母。我应该以某种方式使用Unicode表示吗?如果您做了类似的事情,请在这里告诉我。我们

        public static int aMatrixDim = 10;
        public static byte aFirstChar = (byte) 'a';
        public static byte aLastChar = (byte) 'z';
        public static int aCharsCount = aLastChar - aFirstChar + 1;

        public PatternsCollection CreateTrainingPatterns(Font font)
        {
            var result = new PatternsCollection(aCharsCount, aMatrixDim*aMatrixDim, aCharsCount);
            for (var i = 0; i < aCharsCount; i++)
            {
                var aBitMatrix = CharToBitArray(Convert.ToChar(aFirstChar + i), font, aMatrixDim, 0);
                for (var j = 0; j < aMatrixDim*aMatrixDim; j++)
                    result[i].Input[j] = aBitMatrix[j];
                result[i].Output[i] = 1;
            }
            return result;
        }

2 个答案:

答案 0 :(得分:2)

List<char>中获取Cryllic大写字符(范围0410到042F):

char CRYLLIC_CAPITAL_START = '\x0410';
char CRYLLIC_CAPITAL_END = '\x042F';

List<char> cryllicCapitalCharacters = new List<char>();
for (char c = CRYLLIC_CAPITAL_START; c <= CRYLLIC_CAPITAL_END; c++)
{
    cryllicCapitalCharacters.Add(c);
}

或者使用 Linq

cryllicCapitalCharacters = Enumerable.Range('\x0410', '\x042F' - '\x0410' + 1)
                                     .Select(x => (char)x).ToList();

要对小写字母执行相同操作,请使用0430044F

俄语Unicode来源:https://en.wikipedia.org/wiki/Cyrillic_script_in_Unicode

答案 1 :(得分:1)

Unicode将32 out of 33俄语字母定义为连续范围 从0x04100x042F(对于大写字母)和从0x04300x044F(对于小写字母)。缺失的字母Ё/ё包含代码0x0401 / 0x0451

因此,要构建俄语字母列表,您可以迭代这些范围并添加缺少的Ё / ё。如果您需要按字母顺序排列字母,则需要进行额外的排序操作:

var russianSmall = Enumerable.Range(0x0430, 32)
    .Concat(new[] { 0x0451 })
    .Select(i => Convert.ToChar(i))
    .ToList();

var russianSmallOrdered = russianSmall
    .OrderBy(c => c.ToString(), StringComparer.Create(new CultureInfo("ru-RU"), false))
    .ToList();

var russianCapital = Enumerable.Range(0x410, 32)
    .Concat(new[] { 0x0401 })
    .Select(i => Convert.ToChar(i))
    .ToList();

var russianCapitalOrdered = russianCapital
    .OrderBy(c => c.ToString(), StringComparer.Create(new CultureInfo("ru-RU"), false))
    .ToList();

演示:https://dotnetfiddle.net/NrcAUy