что самый быстрый путь состоит в том, чтобы генерировать уникальный набор в .net 2

Вы получаете эту причину ошибки, выполнив minsum, maxsum = 0. Вы должны использовать последовательность (список, кортеж, dict или диапазон, например). Python итерирует его, а затем приписывает соответствующие значения переменным. Конечно, левая и правая сторона должны иметь одинаковое количество элементов. Если есть только один, это должна быть последовательность.

Как сказали вам комментарии, вы можете сделать minsum, maxsum = 0, 0.

Range (), конечно, не задействован.

В дополнение к этому, вы можете сделать это:

for value in arr[:4]:
    minsum += value
for value in arr[1:]:
    maxsum += value

Это лучше, чем использование диапазона и индекса. И я предлагаю вам следовать рекомендации PEP8 для имени функции (mini_max_sum вместо miniMaxSum: имена функций и переменных PEP8

) Имена функций должны быть строчными, со словами разделены подчеркиваниями, необходимыми для улучшения читабельности.

Имена переменных следуют тому же соглашению, что и имена функций.

mixedCase допускается только в тех контекстах, где это уже является преобладающим стилем (например, threading.py), чтобы сохранить обратную совместимость.

blockquote>

6
задан dice 28 October 2008 в 10:38
поделиться

6 ответов

У меня есть он работающий через 0,34 секунды по сравнению с 9 + минуты

Проблема при сравнении структур KeyValuePair. Я работал вокруг этого путем записи объекта компаратора и передачи экземпляра его к Словарю.

Из того, что я могу определить, KeyValuePair. GetHashCode () возвращает хэш-код, он Key объект (в этом примере наименее уникальный объект).

Как словарь добавляет (и проверяет существование), каждый объект, это использует и Равняется и функции GetHashCode, но должно полагаться, Равняется функции, когда хэш-код менее уникален.

Путем обеспечения более уникальной функции GetHashCode это excerises Равняется функции намного менее часто. Я также оптимизировал, Равняется функции для сравнения более уникальных Значений прежде меньше unqiue Ключей.

86,000 * 11 объектов с 10 000 выполнений уникальных свойств за 0,34 секунды с помощью объекта компаратора ниже (без компаратора возражают, 9 минутам требуются 22 секунды),

Надежда это помогает :)

    class StringPairComparer
        : IEqualityComparer<KeyValuePair<string, string>>
    {
        public bool Equals(KeyValuePair<string, string> x, KeyValuePair<string, string> y)
        {
            return x.Value == y.Value && x.Key == y.Key;
        }
        public int GetHashCode(KeyValuePair<string, string> obj)
        {
            return (obj.Key + obj.Value).GetHashCode();
        }
    }

Править: Если бы это была всего одна строка (вместо KeyValuePair, где строка = Name+Value), то это было бы приблизительно вдвое более быстро. Это - хорошая интересная проблема, и я потратил faaaaaar слишком много времени на него (я учился тихий немного хотя),

12
ответ дан 9 December 2019 в 20:50
поделиться

если Вам не нужна никакая определенная корреляция между каждой парой ключ/значение и уникальными значениями, Вы генерируете, Вы могли просто использовать GUID? Я предполагаю, что проблема состоит в том, что Ваш текущий 'Ключ' не уникален в этом зубчатом массиве.

Dictionary<System.Guid, KeyValuePair<string, string>> myDict 
   = new Dictionary<Guid, KeyValuePair<string, string>>();


foreach of your key values in their current format
   myDict.Add(System.Guid.NewGuid(), new KeyValuePair<string, string>(yourKey, yourvalue))

Кажется, что это сохранило бы то, в чем Вы нуждаетесь, но я не знаю, как Вы задержали бы данные из этого, поскольку не будет никаких семантических отношений между генерировать Гуидом и что Вы первоначально имели...

Можно ли больше обеспечивать информацию в вопросе?

0
ответ дан 9 December 2019 в 20:50
поделиться

Как насчет:

Dictionary<NameValuePair,int> hs = new Dictionary<NameValuePair,int>();
foreach (i in jaggedArray)
{
    foreach (j in i)
    {
        if (!hs.ContainsKey(j))
        {
            hs.Add(j, 0);
        }
    }
}
IEnumerable<NameValuePair> unique = hs.Keys;

конечно, если Вы использовали C# 3.0.NET 3.5:

var hs = new HashSet<NameValuePair>();
hs.UnionWith(jaggedArray.SelectMany(item => item));

добился бы цели.

0
ответ дан 9 December 2019 в 20:50
поделиться

Вместо того, чтобы использовать a Dictionary почему бы не расширяться KeyedCollection<TKey, TItem>? Согласно документации:

Обеспечивает абстрактный базовый класс для набора, ключи которого встраиваются в значения.

Затем необходимо переопределить protected TKey GetKeyForItem(TItem item) функция. Поскольку это - гибрид между IList<T> и IDictionary<TKey, TValue> Я думаю, что это, вероятно, будет довольно быстро.

0
ответ дан 9 December 2019 в 20:50
поделиться

Используйте KeyValuePair в качестве класса обертки и затем создайте словарь с создать набор, возможно? Или реализуйте свою собственную обертку, которая переопределяет Равняние и GetHashCode.

Dictionary<KeyValuePair, bool> mySet;

for(int i = 0; i < keys.length; ++i)
{
    KeyValuePair kvp = new KeyValuePair(keys[i], values[i]);
    mySet[kvp] = true;
}
0
ответ дан 9 December 2019 в 20:50
поделиться

Вы представили свой код? Вы уверены, что циклы foreach являются узким местом и не ретривером. GetVehicles ()?

Я действительно создавал маленький тестовый проект, где я фальсифицирую ретривера и позволяю ему возвратиться 86.000 X 11 значений. Моя первая попытка достигла в 5 секунд, создав включенные данные.

Я использовал то же значение для обоих ключ и значение, где первый ключ был "0#0" и последним "85999#10".

Затем я переключился на гуиды. Тот же результат.

Затем я сделал ключ дольше, как это:

        var s = Guid.NewGuid().ToString();
        return s + s + s + s + s + s + s+ s + s + s;

Теперь потребовалось почти 10 секунд.

Затем я делал ключи безумно долго и добирался из исключения памяти. У меня нет файла подкачки на моем компьютере, таким образом, я сразу получил это исключение.

Какой длины Ваши ключи? Действительно ли Ваше потребление виртуальной памяти является причиной Вашей низкой производительности?

0
ответ дан 9 December 2019 в 20:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: