2017-05-03 96 views
0

这是我如何获得两个字母之间的英文字母序列,但它仅适用于英语。有人知道我怎么能做同样的事情,但对于俄文字母。我应该以某种方式使用Unicode表示法?如果你没有类似的东西,请让我知道here.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; 
     } 
+0

了'char'是不是一个'byte',而是一个'short' –

+0

更通用的解决方案是,如果你需要的字母被按字母顺序排列的其他排序操作是必需的比你想象的更难。请参阅http://stackoverflow.com/questions/15472692/how-to-get-all-characters-within-a-certain-utf-8-language-group以获取解释。 –

回答

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

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

相关问题