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>();