2017-05-03 45 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

相關問題