Привет всем, отличное сообщество, которое вы получили здесь. Я инженер-электрик, делающий некоторые «программирующие» работы на стороне, чтобы помочь оплатить счета. Я говорю это, потому что хочу, чтобы вы учли, что у меня нет надлежащей подготовки компьютерных наук, но я кодировался последние 7 лет.Сравнение 2 огромных списков с использованием C# несколько раз (с завихрением)
У меня есть несколько таблиц excel с информацией (все числовые), в основном это «набранные номера телефонов» в одном столбце и количество минут для каждого из этих номеров на другом. Отдельно у меня есть список «кодовых номеров префикса оператора» для разных операторов в моей стране. То, что я хочу сделать, это разделить весь «трафик» на перевозчика. Вот сценарий:
Первый набранный номер строки: 123456789ABCD, 100 < - Это будет 13-значный номер телефона и 100 минут.
У меня есть список 12,000+ префиксов кодов для несущей 1, эти коды имеют разную длину, и мне нужно, чтобы проверить все из них:
Префикс 1: < - этот код составляет 7 цифр.
Мне нужно проверить первые 7 цифр для набранного номера, сравнить его с набранным номером, если совпадение найдено, я бы добавил количество минут для промежуточного итога для последующего использования. Учтите, что не все префиксные коды имеют одинаковую длину, иногда они короче или длиннее.
Большая часть этого должна быть куском пирога, и я мог бы это сделать, но я получаю от страха огромное количество данных; В некоторых случаях списки набранных номеров состоят из 30 000 номеров, а «код префикса несущей» содержит около 13 000 строк, и я обычно проверяю 3 оператора, что означает, что я должен выполнять множество «совпадений».
У кого-нибудь есть идеи, как это сделать эффективно с помощью C#? Или любой другой язык, чтобы быть добрым честным. Мне нужно делать это довольно часто, и разработка инструмента для этого имеет смысл. Мне нужна хорошая перспектива у кого-то, у кого есть этот «компьютерный ученый».
Списки не обязательно должны быть в листах Excel, я могу экспортировать в файл csv и работать оттуда, мне не нужен интерфейс «MS Office».
Благодарим за помощь.
Обновление:
Спасибо всем за ваше время на ответ на мой вопрос. Думаю, по моему невежеству я преувеличиваю слово «эффективный». Я не выполняю эту задачу каждые несколько секунд. Это то, что я должен делать один раз в день, и мне не нравится делать это с помощью Excel и VLOOKUP и т. Д.
Я узнал о новых концепциях от вас, ребята, и я надеюсь, что смогу построить решение (ы), используя ваши идеи ,
Хотя мне очень нравится TRIE предложение тарелочек, я не думаю, что вы должны беспокоиться о эффективность для этого конкретного приложения. 30 000 номеров не так много для компьютера - даже на дрянной машине, я не могу себе представить, что общее число хрустов занимает больше 10 секунд. Кроме того, вы можете хранить сразу 1 миллион целых чисел в памяти, а его еще меньше 4 МБ. Помните, что они говорят о преждевременной оптимизации ... – Juliet
Спасибо, Джульетта, я не видел этого. – gus
Поскольку коды префикса несущей могут отличаться по длине, может ли префикс-код какой-либо префикс префикса более длинного префиксного кода оператора (то есть префиксы 123 и 12345)? Если это так, что имеет приоритет? – mbeckish