2014-10-08 4 views
0

Это может показаться тривиальным вопросом, но я клянусь, что исчерпал каждый метод, который я могу найти. Я пытаюсь вывести содержимое словаря в текстовое поле. Это написано на C#. Idk насколько он уместен, но я выводю в текстовое поле WPF. Я попытался следующие методы:String.Format не будет создавать правильный интервал, исчерпанный всеми способами

Dictionary<string, int> nGramDictionary = StatisticalBreakDown.getNGramFrequency(filePath, 3); 
MasterStatsTextBlock.Text += "~N-Gram Frequency~" + "\r\n"; 
foreach (var kvp in nGramDictionary) 
{ 
    MasterStatsTextBlock.Text += string.Format("{0,-40}{1}{2}", kvp.Key, kvp.Value, Environment.NewLine); 
} 
MasterStatsTextBlock.Text += "\r\n"; 

и

Dictionary<string, int> nGramDictionary = StatisticalBreakDown.getNGramFrequency(filePath, 3); 
MasterStatsTextBlock.Text += "~N-Gram Frequency~" + "\r\n"; 
foreach (var kvp in nGramDictionary) 
{ 
    MasterStatsTextBlock.Text += string.Format("{0}{1}{2}", kvp.Key.PadRight(-40), kvp.Value, Environment.NewLine); 
} 
MasterStatsTextBlock.Text += "\r\n"; 

и

Dictionary<string, int> nGramDictionary = StatisticalBreakDown.getNGramFrequency(filePath, 3); 
MasterStatsTextBlock.Text += "~N-Gram Frequency~" + "\r\n"; 
foreach (var kvp in nGramDictionary) 
{ 
    MasterStatsTextBlock.Text += string.Format("{0}\t\t\t{1}{2}", kvp.Key, kvp.Value, Environment.NewLine); 
} 
MasterStatsTextBlock.Text += "\r\n"; 

Но ни работы. Все ругаются, что они будут работать, но они этого не делают. Вот как выглядит мой вывод со всеми тремя из них:

~N-Gram Frequency~ 
talan kirk book      1 
kirk book of       1 
book of mormon      1 
of mormon am       1 
mormon am tt       1 
am tt extraction      1 
tt extraction nephi      1 
extraction nephi nephi    1 
nephi nephi the      1 
nephi the lord      1 
the lord speaks      1 
lord speaks to      1 
speaks to his       1 
to his children      1 
his children the      1 
children the savior     1 
the savior teaches      1 
savior teaches plainly    1 
teaches plainly because    1 

Помогите. Я серьезно не понимаю, почему они не работают.

+4

Вы установили шрифт в непропорциональный шрифт? Я был бы удивлен, увидев, что все работает, когда персонажи имеют разные размеры. Я также задаюсь вопросом, является ли текстовое поле наиболее подходящим способом отображения этих данных. –

+0

Из любопытства есть ли пробельные символы в значениях «Key»? Отличаются ли результаты, если вы заменяете 'kvp.Key'' kvp.Key.Trim() 'при записи записей? –

+1

используйте этот 'string.Format (" <{0,-40}><{1}> {2} "' и проверяйте (или публикуете) вывод. – ths

ответ

1

Я подозреваю, что проблема заключается в том, что вы используете TextBox, и я предполагаю, что вы не установили текст в моноширинный шрифт ... но вы пытаетесь использовать форматирование строк, чтобы точно позиционировать значения ,

Чтобы исследовать форматирование строк, я бы рекомендовал вместо этого использовать консольное приложение. Например, следующая демонстрация показывает корректное форматирование строк. И ключ и значение имеют максимальную длину, с ключом быть выровнен по левому краю, а значение бытия выравниваются по правому краю:

using System; 
using System.Collections.Generic; 

class Program 
{ 
    static void Main(string[] args) 
    { 
     var data = new Dictionary<string, int> 
     { 
      { "first", 10 }, 
      { "second", 1 }, 
      { "third", 100000 } 
     }; 

     foreach (var entry in data) 
     { 
      Console.WriteLine("{0,-20}{1,8}", entry.Key, entry.Value); 
     } 
    } 
} 

Попробуйте, что в вашем WPF UI, и вы, вероятно, увидеть тот же разбитость - если не вы устанавливаете шрифт моноширинным шрифтом.

Однако моноширинный шрифт может выглядеть уродливым ... в этом случае вы вполне можете не использовать TextBox для этого вообще. Существуют другие, более совершенные текстовые элементы управления, которые вы могли бы использовать, или вы могли бы использовать элемент управления, который больше ориентирован на отображение списков/сеток данных.

 Смежные вопросы

  • Нет связанных вопросов^_^