【问题标题】:How to get a sequence of letters between two letters如何获得两个字母之间的字母序列
【发布时间】:2017-05-03 14:24:51
【问题描述】:

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

        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;
        }

【问题讨论】:

标签: c# unicode char


【解决方案1】:

List&lt;char&gt; 中获取 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

【讨论】:

    【解决方案2】:

    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

    【讨论】:

      猜你喜欢
      • 2014-01-19
      • 2015-07-19
      • 1970-01-01
      • 2012-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多