0 / 0 / 0
Регистрация: 04.01.2013
Сообщений: 31
1

Работа с классом SortedDictionary

29.05.2013, 09:18. Показов 4235. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Есть переменная dict в которую закидываются данные, в последствии надо скопировать ключи в массив string а значения в массив double как это сделать?(пример напишите) попытался описать это в foreach не получилось, поэтому еще вопрос как собственно работает foreach?
C#
1
2
3
4
public string[] g2;
public double[] z2;
 
SortedDictionary<char, double> dict = new SortedDictionary<char, double>();
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
29.05.2013, 09:18
Ответы с готовыми решениями:

Работа с SortedDictionary
SortedDictionary&lt;int, int&gt; dic = new SortedDictionary&lt;int,int&gt;(); Есть число в каждой строчке, +...

Работа с классом
Ребята подскажите как правильно исправить ошибку что бы компилировался код public class...

Работа с классом
Итак, продолжаю изучать С, на этот раз волею судьбы закинуло в С#. Проблема. Есть некий класс....

Работа с классом, подразделы
Создаю класс для работы с памятью: class Engine { public static string...

15
104 / 104 / 19
Регистрация: 23.05.2013
Сообщений: 185
29.05.2013, 09:52 2
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using System;
using System.Collections.Generic;
 
namespace ConsoleApplication1
{
    internal class Program
    {
        private static void Main()
        {
 
            int index = 0;
 
            SortedDictionary<char, double> dict = new SortedDictionary<char, double>();
 
            dict.Add('a', 112.2);
            dict.Add('w', 32123232.3);
            int length = dict.Count;
            char[] g2 = new char[length];
            double[] z2 = new double[length];
 
            foreach (var d in dict)
            {
                g2[index] = d.Key;
                z2[index] = d.Value;
                index++;
            }
            Console.WriteLine("index\tString\tDoudle");
            for (int i = 0; i < length; i++)
            {
                Console.WriteLine("{0}\t{1}\t{2}", i, g2[i], z2[i]);
            }
            Console.ReadKey();
        }
    }
}
0
36 / 36 / 4
Регистрация: 27.05.2012
Сообщений: 180
Записей в блоге: 5
29.05.2013, 09:54 3
наверное как то так

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    SortedDictionary<string, int> sort = new SortedDictionary<string, int>();
    sort.Add("cat", 2);
    sort.Add("dog", 9);
    sort.Add("mouse", 4);
    sort.Add("programmer", 100);
 
    string[] st = new string[sort.Count];
    int[] it = new int[sort.Count];
            
    for (int i = 0; i < sort.Count; i++) 
    {
        sort.Keys.CopyTo(st, 0);
        sort.Values.CopyTo(it, 0);
    }
0
0 / 0 / 0
Регистрация: 04.01.2013
Сообщений: 31
29.05.2013, 11:59  [ТС] 4
Цитата Сообщение от FrostByte Посмотреть сообщение
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
using System;
using System.Collections.Generic;
 
namespace ConsoleApplication1
{
    internal class Program
    {
        private static void Main()
        {
 
            int index = 0;
 
            SortedDictionary<char, double> dict = new SortedDictionary<char, double>();
 
            dict.Add('a', 112.2);
            dict.Add('w', 32123232.3);
            int length = dict.Count;
            char[] g2 = new char[length];
            double[] z2 = new double[length];
 
            foreach (var d in dict)
            {
                g2[index] = d.Key;
                z2[index] = d.Value;
                index++;
            }
            Console.WriteLine("index\tString\tDoudle");
            for (int i = 0; i < length; i++)
            {
                Console.WriteLine("{0}\t{1}\t{2}", i, g2[i], z2[i]);
            }
            Console.ReadKey();
        }
    }
}
...

Добавлено через 7 минут
FrostByte, При первой же попытки присвоения программой выдается "Ссылка на объект не указывает на экземпляр объекта."
0
19 / 19 / 1
Регистрация: 04.03.2010
Сообщений: 86
29.05.2013, 12:06 5
у меня все работает
Работа с классом SortedDictionary
0
0 / 0 / 0
Регистрация: 04.01.2013
Сообщений: 31
29.05.2013, 12:10  [ТС] 6
Цитата Сообщение от N!K Посмотреть сообщение
у меня все работает
Вложение 274613
разница есть если запускать в форме а не консоли?
0
19 / 19 / 1
Регистрация: 04.03.2010
Сообщений: 86
29.05.2013, 12:13 7
Естественно Замените все вызовы Console.WriteLine на ListBox (или куда вы там данные выводите), а так же проверьте как вы добавляете данные в словарь
0
0 / 0 / 0
Регистрация: 04.01.2013
Сообщений: 31
29.05.2013, 12:17  [ТС] 8
Цитата Сообщение от N!K Посмотреть сообщение
Естественно Замените все вызовы Console.WriteLine на ListBox (или куда вы там данные выводите), а так же проверьте как вы добавляете данные в словарь
я говорю именно про ошибку которая у меня возникает, в общем вот код
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        public string s = "";                   //Таблица Символов Текста
        public string s1 = "оеаитнсрвлкмдпуяызьбгчйхжюшцщэф";                  //Таблица Символов Русского Алфавита 31
        public string[] g1 = { "о","е","а","и","т","н","с","р","в","л","к","м","д","п","у","я","ы","з","ь","б","г","ч","й","х","ж","ю","ш","ц","щ","э","ф" };
        public double[] z1 = { 90, 72, 62, 62, 53, 53, 45, 40, 38, 35, 28, 26, 25, 23, 21, 18, 16, 16, 14, 14, 13, 12, 10, 9, 7, 6, 6, 4, 3, 3, 2};
        public char[] g2 = new char[31];
        public double[] z2 = new double[31];
        private void открытьФайлToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                textBox1.Text = File.ReadAllText(openFileDialog1.FileName);
            }
        }
 
        private void выходToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Application.Exit();
        }
 
        private void зашифроватьТекстToolStripMenuItem_Click(object sender, EventArgs e)
        {
            textBox2.Clear();
            if (textBox1.Text == "")
                MessageBox.Show("Откройте файл с текстом!");
            string a = textBox1.Text;
            string b = "";
            int n = 3;
            for (int i = 0; i < a.Length; i++)
            {
                if (a[i] != ' ' && a[i] != ',' && a[i] != '.' && a[i] != ':' && a[i] != ';' && a[i] != '-')
                {
                    if (Convert.ToChar((int)a[i] + n) > 1103)
                        b += Convert.ToChar((int)a[i] - 32 + n);
                    else
                        b += Convert.ToChar((int)a[i] + n);
                    textBox2.Text += b[i];
                }
                else
                {
                    b += a[i];
                    textBox2.Text += b[i];
                }
            }
        }
 
        private void создатьТаблицуСимволовToolStripMenuItem_Click(object sender, EventArgs e)
        {
            textBox3.Clear();
            textBox3.ScrollBars = ScrollBars.Vertical;
            if (textBox2.Text == "")
                MessageBox.Show("Зашифруйте текст!");
            string text = textBox2.Text.Replace(" ", string.Empty).ToLower();
 
            SortedDictionary<char, double> dict = new SortedDictionary<char, double>();
 
            for (int i = 0; i < text.Length; i++)
            {
                if (text[i] != ',' && text[i] != '.' && text[i] != ':' && text[i] != ';' && text[i] != '-')
                    if (dict.ContainsKey(text[i]))
                        dict[text[i]]++;
                    else
                        dict.Add(text[i], 1);
            }
           int ind = 0;
            foreach (var d in dict)
            {
                g2[ind] = d.Key;
                z2[ind] = d.Value;
                ind++;
            }
            var sortDict = dict.OrderByDescending(x => x.Value);
            foreach (KeyValuePair<char, double> kvp in sortDict)
            {
                textBox3.Text += "Символ: '" + kvp.Key + "', - " + kvp.Value / 1000 + "\r\n";
                s += kvp.Key;
            }
            графикЧастотногоАнализаToolStripMenuItem.Visible=true;
        }
 
        private void заменитьToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (textBox3.Text == "")
            {
                MessageBox.Show("Создайте таблицу Символов!");
            }
            else
            {
                label2.Text = "Расшифрованный Текст:";
                string t = textBox2.Text;
                string t1 = "";
                bool f = true;
                for (int i = 0; i < t.Length; i++)
                {
                    for (int j = 0; j < s1.Length; j++)
                    {
                        if (t[i] == s[j])
                        {
                            t1 += s1[j];
                            f = false;
                        }
                    }
                    if (f == true)
                        t1 += t[i];
                    else
                        f = true;
                }
                textBox2.Clear();
                textBox2.Text += t1;
            }
        }
 
        private void Form1_Load(object sender, EventArgs e)
        {
            textBox4.ScrollBars = ScrollBars.Vertical;
        }
 
        private void справкаToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form2 newform = new Form2();
            newform.Show();
        }
 
        private void графикЧастотногоАнализаToolStripMenuItem_Click(object sender, EventArgs e)
        {
            Form3 form = new Form3();
            form.Show();
            form.z1 = z1;
            form.g1 = g1;
            form.z2 = z2;
            form.g2 = g2;
        }
    }
}
0
19 / 19 / 1
Регистрация: 04.03.2010
Сообщений: 86
29.05.2013, 12:40 9
Проверьте правильно ли заполняется словарь. Если не сложно выложите проект
0
0 / 0 / 0
Регистрация: 04.01.2013
Сообщений: 31
29.05.2013, 12:56  [ТС] 10
Цитата Сообщение от N!K Посмотреть сообщение
Проверьте правильно ли заполняется словарь. Если не сложно выложите проект
ну мне сложно определить правильно ли это происходит но что работает все нормально это факт)
http://yadi.sk/d/9YSOc5S85Hlci
0
19 / 19 / 1
Регистрация: 04.03.2010
Сообщений: 86
29.05.2013, 13:46 11
Запустил программу, ошибок ни одной не появилось.
Работа с классом SortedDictionary
0
0 / 0 / 0
Регистрация: 04.01.2013
Сообщений: 31
29.05.2013, 13:51  [ТС] 12
Цитата Сообщение от N!K Посмотреть сообщение
Запустил программу, ошибок ни одной не появилось. Вложение 274666
я закомментил часть с присваиванием, ищи в форме 1
0
19 / 19 / 1
Регистрация: 04.03.2010
Сообщений: 86
29.05.2013, 14:05 13
ты задаешь размер массивов = 31
C#
1
2
public char[] g2 = new char[31];
        public double[] z2 = new double[31];
а когда проходишь по словарю, то там 37 записей. Я 31 на 41 поменял для примера и ошибок нет
1
0 / 0 / 0
Регистрация: 04.01.2013
Сообщений: 31
29.05.2013, 14:10  [ТС] 14
Цитата Сообщение от N!K Посмотреть сообщение
ты задаешь размер массивов = 31
C#
1
2
public char[] g2 = new char[31];
        public double[] z2 = new double[31];
а когда проходишь по словарю, то там 37 записей. Я 31 на 41 поменял для примера и ошибок нет
а почему нельзя написать так?
C#
1
2
public char[] g2;
public double[] z2;
0
19 / 19 / 1
Регистрация: 04.03.2010
Сообщений: 86
29.05.2013, 14:23 15
Цитата Сообщение от satun Посмотреть сообщение
а почему нельзя написать так?
C#
1
2
public char[] g2;
public double[] z2;
перед обращением к элементам массива по индексу, необходимо его сначала инициализировать.

Добавлено через 8 минут
можно создать массивы не в начале метода, а после того, как словарь заполнен
C#
1
2
public char[] g2 = new char[dict.Count];
public double[] z2 = new double[dict.Count];
1
0 / 0 / 0
Регистрация: 04.01.2013
Сообщений: 31
29.05.2013, 15:10  [ТС] 16
Цитата Сообщение от N!K Посмотреть сообщение
перед обращением к элементам массива по индексу, необходимо его сначала инициализировать.

Добавлено через 8 минут
можно создать массивы не в начале метода, а после того, как словарь заполнен
C#
1
2
public char[] g2 = new char[dict.Count];
public double[] z2 = new double[dict.Count];
у меня красным подчеркивает(паблик), так что если я создам то они будут только при заполнении существовать а мне их потом на другую форму вытащить надо будет

Добавлено через 6 минут
а ну если после... ну я так далеко не заглядывалxD
0
29.05.2013, 15:10
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.05.2013, 15:10
Помогаю со студенческими работами здесь

Работа с классом Money
Помогите, пожалуйста :( 1.Реализовать определение нового класса (закрытые атрибуты, свойства,...

Работа с классом Regex
Здравствуйте. Сейчас работаю с классом Regex и возникла следующая трудность: В txt файле у меня...

Работа с классом WebClient
Здравствуйте! Мне нужно передать программе исходный код некой web-страницы. Для этого решил...

Работа с классом Regex_2
Здравствуйте! Работа с классом Regex продолжается и сейчас я столкнулся со следующей трудностью: В...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru