Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.96/56: Рейтинг темы: голосов - 56, средняя оценка - 4.96
5 / 5 / 0
Регистрация: 10.12.2012
Сообщений: 38

Проверка на существование ключа в ассоциативном массиве

25.12.2012, 14:31. Показов 10570. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день! Задача следующая: есть массив строк следующего содержания:
"номер_телефона продолжительность_разговора"
Например:
89092342344 32
90923185327 32
89092289376 32
89092342344 32

Каждый номер телефона встречается множество раз,
Нужно проитись по этому массиву и создать ассоциативный массив типа:
"номер_телефона сумма_времени_всех_звонков"

Предположил решение(Выделить как код не смог):
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
            // data_calls - входной массив строк
            foreach(string call_info in data_calls)
            {
                // разбиваем строку на массив "номер телефона" и "сколько секунд проговорил"
                data = call_info.Split(' ');
                // dic выходной ассоциативный массив
 
                // если номера еще не существует
                if (dic[data[0]] == null)
                {
                    // то заносим 0 секунд
                    dic[data[0]] = 0;
                }
                else
                {
                    // Если встречаем еще раз то просто прибавляем время которое абонент проговорил в этом звонке
                    dic[data[0]] += Convert.ToInt32(data[1]);
                }
      }
Компилятор не даёт обращаться к не инициализированным элементам массива - if (dic[data[0]] == null) -
это не проходит. То есть нужно как то проверить существует ли ключ в массиве. Спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
25.12.2012, 14:31
Ответы с готовыми решениями:

Проверка файла на существование
Нужно выполнить код C# после нажатия кнопки: (буду писать на русском, думаю достаточно понятно) private void...

Проверка файла на существование
Подскажите пожалуйста, почему выполняется только вторая функция? То есть проверка файла пропускается полностью.. не могу никак разобраться...

Проверка на существование файла
Добрый день. Пишу небольшую программку, связанную с перемещением файлов и возник вопрос. var info = new FileInfo(FullPath);//путь до...

7
 Аватар для Пaтрик
442 / 410 / 132
Регистрация: 21.01.2012
Сообщений: 976
25.12.2012, 14:42
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
using System;
using System.Linq;
 
class Program
{
    static void Main(string[] args)
    {
        var list = new[] {
                new { Phone = 89092342344, Duration = 32 },
                new { Phone = 90923185327, Duration = 32 },
                new { Phone = 89092289376, Duration = 32 },
                new { Phone = 89092342344, Duration = 32 }
            };
        var result = from p in list
                     group p by p.Phone into t
                     orderby t.Key
                     select new
                     {
                         Phone = t.Key,
                         TotalDuration = t.Sum(x => x.Duration)
                     };
        foreach (var res in result)
            Console.WriteLine("{0} : {1}", res.Phone, res.TotalDuration);
        Console.ReadKey(true);
    }
}
0
5 / 5 / 0
Регистрация: 10.12.2012
Сообщений: 38
25.12.2012, 14:57  [ТС]
Извините, я C# сегодня впервые вижу. Не могли бы вы просто сказать как проверить ключ?

Добавлено через 1 минуту
Кстати у меня номеров не 4, а 10000

Добавлено через 7 минут
Возьмите строковый массив data_calls. Повторюсь со структурой:
номер - продолжительность одного разговора
["89038776152 63", "9091237711 92", "890912312333 12" .... и так далее... ... "89038776152 82"]
и преобразуйте его а ассоциативный, где ключём является номер телефона, а значением сумма всех разговоров. Повторюсь еще раз, один номер телефона может встречаться много раз.
0
 Аватар для Пaтрик
442 / 410 / 132
Регистрация: 21.01.2012
Сообщений: 976
25.12.2012, 15:04
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
using System;
using System.Collections.Generic;
 
class Program
{
    static void Main(string[] args)
    {
        string[] calls = 
        {
            "89092342344 32",
            "90923185327 32",
            "89092289376 32",
            "89092342344 32",
        };
        Dictionary<UInt64, int> dicCalls = new Dictionary<UInt64, int>();
        foreach (string call in calls)
        {
            string[] phoneAndDuration = call.Split(' ');
            if (phoneAndDuration.Length != 2)
                throw new Exception();
            UInt64 phone = Convert.ToUInt64(phoneAndDuration[0]);
            int duration = Convert.ToInt32(phoneAndDuration[1]);
            if (dicCalls.ContainsKey(phone))
                dicCalls[phone] += duration;
            else
                dicCalls.Add(phone, duration);
        }
        foreach(var call in dicCalls)
            Console.WriteLine("{0} - {1}", call.Key, call.Value);
        Console.ReadKey(true);
    }
}
1
5 / 5 / 0
Регистрация: 10.12.2012
Сообщений: 38
25.12.2012, 15:22  [ТС]
Метод ContainsKey ассоциативного массива - это то что мне было нужно, ваш код работает, задача решена, спасибо)
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
25.12.2012, 15:39
Цитата Сообщение от Dof Посмотреть сообщение
ассоциативного массива
В c# нет такого понятия. Dictionary, обычно называют словарем.
0
5 / 5 / 0
Регистрация: 10.12.2012
Сообщений: 38
25.12.2012, 16:43  [ТС]
Понял, учту.
0
быдлокодер
 Аватар для kravam
1724 / 911 / 106
Регистрация: 04.06.2008
Сообщений: 5,701
26.12.2012, 03:11
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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Collections;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
 
            var dictionary = new Dictionary<string, int>();
            string[] data_calls = 
            {
            "89092342344 4",
            "89092342344 2", 
            "90923185327 32",
            "89092289376 32",
            "90923185327 5",
            "89092289376 6",
            "89092342344 32",        
            "89092342344 67",       
            "89092289376 78"
            };
 
            string[] temp = new string[2];
 
            for (int i = 0; i < data_calls.Count(); i++)
            {
                temp = data_calls[i].Split(' ');
                if (dictionary.ContainsKey(temp[0]))
                    dictionary[temp[0]] += Convert.ToInt32(temp[1]);
                else
                    dictionary.Add(temp[0], Convert.ToInt32(temp[1]));
            }
 
            //Вывод:  
            foreach (KeyValuePair<string, int> p in dictionary)
                Console.WriteLine(p.Key+ " "+ Convert.ToInt32(p.Value));
 
 
        }
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.12.2012, 03:11
Помогаю со студенческими работами здесь

Проверка на существование файла
Программа проверяет существует ли данный файл в текущем каталоге. using System; using System.Collections.Generic; using...

Проверка объекта на существование
Создаю контейнер List&lt;string&gt; L = new List&lt;string&gt;(); Как сделать, что если контейнер создан вывести сообщение &quot;контейнер...

Получить имя ключа в ассоциативном массиве
Как получить имя ключа в ассоциативном массиве. Допустим массив такой: =&gt; array(1) { =&gt; array(2){ =&gt; 1 ...

Реестр. Запись и проверка на существование ключа
Привет. Да, тема заезжена, но ситуация нестандартная. Прописываю в автозагрузку: Reg-&gt;RootKey = HKEY_LOCAL_MACHINE; ...

Реестр: проверка на существование раздела и ключа
Здравствуйте скажите как можно создать раздел в реестре и в этом разделе создать ключ и как осуществить проверу раздела если раздел есть...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru