Что лучший способ состоит в том, чтобы установить все значения в Словаре C# <строка, bool>?

От Руководство по стилю для Кода Python :

предпочтительный способ обернуть длинные линии при помощи подразумеваемого продолжения строки Python в круглых скобках, скобках и фигурных скобках. Длинные линии могут быть повреждены по нескольким строкам путем обертывания выражений в круглых скобках. Они должны использоваться в предпочтении к использованию обратной косой черты для продолжения строки.

Обратные косые черты могут все еще время от времени быть соответствующими. Например, долго, несколько с операторами не могут использовать неявное продолжение, таким образом, обратные косые черты приемлемы:

with open('/path/to/some/file/you/want/to/read') as file_1, \
        open('/path/to/some/file/being/written', 'w') as file_2:
    file_2.write(file_1.read())

Другой такой случай с операторами контроля.

Удостоверяются, что расположили длительную строку с отступом соответственно. Предпочтительное место для повреждения вокруг бинарного оператора после оператор, не перед ним. Некоторые примеры:

class Rectangle(Blob):

    def __init__(self, width, height,
                 color='black', emphasis=None, highlight=0):
        if (width == 0 and height == 0 and
                color == 'red' and emphasis == 'strong' or
                highlight > 100):
            raise ValueError("sorry, you lose")
        if width == 0 and height == 0 and (color == 'red' or
                                           emphasis is None):
            raise ValueError("I don't think so -- values are %s, %s" %
                             (width, height))
        Blob.__init__(self, width, height,
                      color, emphasis, highlight)

РЕДАКТИРОВАНИЕ: PEP8 теперь рекомендует противоположное соглашение (для повреждения при бинарных операциях) используемый Математиками и их издателями улучшить удобочитаемость.

стиль Donald Knuth повреждения прежде бинарный оператор выравнивает операторы вертикально, таким образом уменьшая рабочую нагрузку глаза при определении, какие объекты добавлены и вычтены.

От PEP8: Должен разрыв строки прежде или после бинарного оператора? :

Donald Knuth объясняет традиционное правило в своей серии Computers и Typesetting: "Хотя формулы в рамках абзаца всегда повреждаются после бинарных операций и отношений, отображенные формулы всегда повреждаются перед бинарными операциями" [3].

Следование традиции от математики обычно приводит к большему количеству читаемого кода:

# Yes: easy to match operators with operands
income = (gross_wages
          + taxable_interest
          + (dividends - qualified_dividends)
          - ira_deduction
          - student_loan_interest)

В коде Python, допустимо повредиться, прежде или после бинарного оператора, пока соглашение последовательно локально. Для нового кода предлагается стиль Knuth.

[3]: Donald Knuth TeXBook, страницы 195 и 196

30
задан Ronnie Overby 22 July 2009 в 17:57
поделиться

5 ответов

Это разумный подход, хотя я бы предпочел:

foreach (var key in dict.Keys.ToList())
{
    dict[key] = false;
}

Вызов ToList () выполняет эту работу, поскольку он извлекает и (временно) сохраняет список ключей, поэтому итерация работает.

72
ответ дан 27 November 2019 в 23:05
поделиться

Вы можете просто вытащить ToList () и выполнить итерацию непосредственно по элементам словаря

Dictionary<string, bool> dict = GetDictionary();
foreach (var pair in dict) 
{
    dict[pair.Key] = false;
}
-2
ответ дан 27 November 2019 в 23:05
поделиться

Я описал разницу между решениями Билли и Рида. Polaris878, обратите внимание на результаты и помните, что преждевременная оптимизация - это корень всего зла; -)

Я переписал решения на VB (потому что сейчас я программирую на этом языке) и использовал ключи типа int (для простоты) , иначе это точно такой же код. Я запустил код со словарем из 10 миллионов записей со значением «истина» для каждой записи.

Исходное решение Billy Witch Doctor:

Dim keys = dict.Keys.ToList
For i = 0 To keys.Count - 1
    dict(keys(i)) = False
Next

Прошедшие миллисекунды: 415

Решение Рида Копси:

For Each key In dict.Keys.ToList
    dict(key) = False
Next

Прошедшие миллисекунды : 395

Итак, в этом случае foreach на самом деле быстрее .

1
ответ дан 27 November 2019 в 23:05
поделиться

Если вы не используете логические объекты с тремя состояниями, вы можете использовать HashSet и вызвать Clear () , чтобы установить значение "false".

6
ответ дан 27 November 2019 в 23:05
поделиться

Сделайте так, как сейчас .. .. foreach выполняется медленно. foreach может быть чище, но вы слишком сильно снижаете производительность, используя его.

Edit:
http://www.codeproject.com/KB/cs/foreach.aspx
http: // www .madprops.org / blog / for-vs-foreach-performance /

-4
ответ дан 27 November 2019 в 23:05
поделиться
Другие вопросы по тегам:

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