KeyValuePair. По нажатию кнопки объект класса должен быть представлен в "красивом" виде: частота и контексты - C#
Формулировка задачи:
Во-первых должно быть 2 dictionary: внешний (с данными в виде <string, WordInfo>, где WordInfo - класс, объекты которого включают само слово, его контексты и частоту), и внутренний - <string, int> - для подсчёта частоты. (хотя можно сделать словари и для контекстов). Т.е. по нажатию кнопки объект класса должен быть представлен в "красивом" виде: частота и контексты...
Помогите разобраться что не так. Особенно в цикле
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.IO; namespace WindowsFormsApplication35 { public partial class Form1 : Form { private Dictionary<string, WordInfo> dict = new Dictionary<string, WordInfo>(); public Form1() { InitializeComponent(); } public class WordInfo { public string word; public Dictionary<string, int> dict1 = new Dictionary<string, int>(); public int freq = 0; public string cont1; public string cont2; } public void button1_Click(object sender, EventArgs e) { Dictionary<string, int> dict1 = new Dictionary<string, int>(); StreamReader myRead = new StreamReader("123.txt",Encoding.Default); string myText = myRead.ReadToEnd(); myRead.Close(); string[] slova = myText.Split(new char[] { ' ', ',', '.', '-', '!', '?', ':', ';', '\r', '\n', '\t', '"', ')', '(' }, StringSplitOptions.RemoveEmptyEntries); foreach (string a in slova) { if (dict1.ContainsKey(a)) dict1[a]++; else dict1.Add(a, 1); } foreach (KeyValuePair<string, int> a in dict1.OrderBy(x => x.Value)) { listBox1.Text += Convert.ToString(a.Key) + Environment.NewLine; int freq = a.Value; } string cont1 = ""; string cont2 = ""; for (int i = 0; i < slova.Length; i++) { int l = i - 2; if (l < 0) l = 0; int r = i + 2; if (r >= slova.Length) r = slova.Length - 1; for (int j = l; j < i; j++) cont1 += slova[j] + ' '; for (int j = i + 1; j <= r; j++) cont2 += slova[j] + ' '; } } private void listBox1_SelectedValueChanged(object sender, EventArgs e) { foreach (KeyValuePair<string, WordInfo> obj in dict) { if (obj.Key == listBox1.SelectedItem.ToString()) { listBox2.Text = obj.Value.cont1 + "\r\n"; listBox3.Text = obj.Value.cont2 + "\r\n"; label3.Text = "Частота: " + obj.Value.freq; } } } private void Form1_Load(object sender, EventArgs e) { } private void button2_Click(object sender, EventArgs e) { } } }
private void listBox1_SelectedValueChanged(object sender, EventArgs e) { foreach (KeyValuePair<string, WordInfo> obj in dict) { if (obj.Key == listBox1.SelectedItem.ToString()) { listBox2.Text = obj.Value.cont1 + "\r\n"; listBox3.Text = obj.Value.cont2 + "\r\n"; label3.Text = "Частота: " + obj.Value.freq; } } }
Решение задачи: «KeyValuePair. По нажатию кнопки объект класса должен быть представлен в "красивом" виде: частота и контексты»
textual
Листинг программы
public Dictionary<string, int> dict1 = new Dictionary<string, int>();
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д