Как я могу реализовать ориентированную на многопотоковое исполнение обертку списка в Delphi?

Используя чистый python, вы можете сделать вставку в OrderedDict, чтобы сохранить порядок вставки:

from collections import OrderedDict

d = OrderedDict()
for l in lst:
    d.setdefault((l['number'], l['favorite']), set()).add(l['color'])

[{'number': k[0], 'favorite': k[1], 'color': v.pop() if len(v) == 1 else v} 
    for k, v in d.items()]   
# [{'color': {'green', 'red'}, 'favorite': False, 'number': 1},
#  {'color': 'red', 'favorite': True, 'number': 1},
#  {'color': 'red', 'favorite': False, 'number': 2}]

Это также можно сделать довольно просто, используя API панд GroupBy: [116 ]

import pandas as pd

d = (pd.DataFrame(lst)
       .groupby(['number', 'favorite'])
       .color
       .agg(set)
       .reset_index()
       .to_dict('r'))
d
# [{'color': {'green', 'red'}, 'favorite': False, 'number': 1},
#  {'color': {'red'}, 'favorite': True, 'number': 1},
#  {'color': {'red'}, 'favorite': False, 'number': 2}]

Если требуется условие строки для одного элемента, вы можете использовать

[{'color': (lambda v: v.pop() if len(v) == 1 else v)(d_.pop('color')), **d_} 
     for d_ in d]
# [{'color': {'green', 'red'}, 'favorite': False, 'number': 1},
#  {'color': 'red', 'favorite': True, 'number': 1},
#  {'color': 'red', 'favorite': False, 'number': 2}]
6
задан Jason Plank 15 December 2011 в 18:16
поделиться

3 ответа

Необходимо взглянуть на класс TMultiReadExclusiveWriteSynchronizer, объявленный в sysutils.pas...

12
ответ дан 8 December 2019 в 12:23
поделиться

Действительно необходимо посмотреть на TThreadList.

Методы.Add.Remove.Clear автоматически блокируют список для Вас. В случае необходимости можно также блокировать/разблокировать по мере необходимости:

x.LockList; 
try 
  //do whatever
finally  
  x.Unlocklist; 
end;

TMultiReadExclusiveWriteSynchronizer является главной идеей, но я не знаю, сглаживали ли они когда-нибудь все ошибки. Это всегда имело проблемы при загрузке.

2
ответ дан 8 December 2019 в 12:23
поделиться

Взгляните на это учебное руководство. Поточная обработка Delphi Путь

Взгляд на Главу 11, но это - весь хороший материал.

5
ответ дан 8 December 2019 в 12:23
поделиться
Другие вопросы по тегам:

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