В Python Вы могли попробовать:
import Queue, os, threading
# synchronised queue
queue = Queue.Queue(0) # 0 means no maximum size
# do stuff to initialise queue with strings
# representing os commands
queue.put('sleep 10')
queue.put('echo Sleeping..')
# etc
# or use python to generate commands, e.g.
# for username in ['joe', 'bob', 'fred']:
# queue.put('imapsync %s' % username)
def go():
while True:
try:
# False here means no blocking: raise exception if queue empty
command = queue.get(False)
# Run command. python also has subprocess module which is more
# featureful but I am not very familiar with it.
# os.system is easy :-)
os.system(command)
except Queue.Empty:
return
for i in range(10): # change this to run more/fewer threads
threading.Thread(target=go).start()
Непротестированный...
(конечно, сам Python является однопоточным. Необходимо все еще извлечь пользу из нескольких потоков с точки зрения ожидания IO, все же.)
На самом деле то, что вы только что описали, идеально подходит для коллекции Dictionary. Он должен содержать пары ключ: значение, независимо от типа значения. Сделав значение отдельным классом, вы сможете легко расширить его в будущем, если возникнет такая необходимость.
Словарь Multivalue может удовлетворить ваши потребности.
class MappedValue
{
public string SomeString { get; set; }
public bool SomeBool { get; set; }
}
Dictionary<string, MappedValue> myList = new Dictionary<string, MappedValue>;
Я думаю, что обычно вы попадаете в концепцию кортежей - что-то вроде Tuple
или Tuple
. . 120] C # 4.0 будет иметь динамическую поддержку кортежей, но кроме этого, вам нужно свернуть свою собственную или загрузить библиотеку Tuple.
Вы можете увидеть мой ответ здесь , где я поместил пример кода для универсального кортежа учебный класс. Или я могу просто опубликовать его здесь:
public class Tuple<T, T2, T3>
{
public Tuple(T first, T2 second, T3 third)
{
First = first;
Second = second;
Third = third;
}
public T First { get; set; }
public T2 Second { get; set; }
public T3 Third { get; set; }
}
Я не верю, что .net имеет встроенную Multi-Map, которая обычно представляет собой структуру данных, которую вы можете использовать для хранения этого типа. С другой стороны, я не думаю, что это вообще излишество, просто использование настраиваемого объекта, содержащего как строку, так и логическое значение.
У вас это не работает?
Dictionary<string, List<string>>
Или вы можете использовать Tuple и у вас есть словарь:
Dictionary<string, Tuple<string, bool>>
Кортеж - всегда хорошее решение. Кроме того, в объектно-ориентированном подходе всегда отдавайте предпочтение композиции перед наследованием. Создайте составной объект, выполняющий группировку. Просто. Я думаю, здесь вы найдете несколько хороших и чистых решений от коллег по stackoverflow'ам. :)
Словарь это просто набор объектов с ключами. Таким образом, он будет содержать любой тип объекта, который вы хотите. Даже простейшие объекты, такие как, скажем, массив (который является производным от Object), но требует намного меньше кода от вашего имени.
Вместо того, чтобы писать весь класс, заполните динамически выделяемый массив или List в значении и запускать его.
Словари очень гибкие.
Другая идея - сохранить логическое значение в отдельной структуре данных, например HashSet.
А как насчет класса Lookup ?
Редактировать:
Внимательно прочитав вопрос, подумайте, что это не лучшее решение, но оно все же хорошее для словарь с некоторыми значениями для одного ключа.
В .NET4 вы можете использовать (не отмечено): Dictionary