Словарь C# с двумя Значениями на Ключ?

В 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, все же.)

39
задан Tom Kidd 30 September 2009 в 21:47
поделиться

11 ответов

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

32
ответ дан 27 November 2019 в 02:39
поделиться

Словарь Multivalue может удовлетворить ваши потребности.

15
ответ дан 6 July 2019 в 17:36
поделиться
class MappedValue
{
    public string SomeString { get; set; }
    public bool SomeBool { get; set; }
}

Dictionary<string, MappedValue> myList = new Dictionary<string, MappedValue>;
14
ответ дан 27 November 2019 в 02:39
поделиться

Я думаю, что обычно вы попадаете в концепцию кортежей - что-то вроде 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; }

}
7
ответ дан 27 November 2019 в 02:39
поделиться

Я не верю, что .net имеет встроенную Multi-Map, которая обычно представляет собой структуру данных, которую вы можете использовать для хранения этого типа. С другой стороны, я не думаю, что это вообще излишество, просто использование настраиваемого объекта, содержащего как строку, так и логическое значение.

3
ответ дан 27 November 2019 в 02:39
поделиться

У вас это не работает?

Dictionary<string, List<string>>

Или вы можете использовать Tuple и у вас есть словарь:

Dictionary<string, Tuple<string, bool>>
2
ответ дан 27 November 2019 в 02:39
поделиться

Кортеж - всегда хорошее решение. Кроме того, в объектно-ориентированном подходе всегда отдавайте предпочтение композиции перед наследованием. Создайте составной объект, выполняющий группировку. Просто. Я думаю, здесь вы найдете несколько хороших и чистых решений от коллег по stackoverflow'ам. :)

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

Словарь это просто набор объектов с ключами. Таким образом, он будет содержать любой тип объекта, который вы хотите. Даже простейшие объекты, такие как, скажем, массив (который является производным от Object), но требует намного меньше кода от вашего имени.

Вместо того, чтобы писать весь класс, заполните динамически выделяемый массив или List в значении и запускать его.

Словари очень гибкие.

0
ответ дан 27 November 2019 в 02:39
поделиться

Другая идея - сохранить логическое значение в отдельной структуре данных, например HashSet.

0
ответ дан 27 November 2019 в 02:39
поделиться

А как насчет класса Lookup ?

Редактировать:

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

0
ответ дан 27 November 2019 в 02:39
поделиться

В .NET4 вы можете использовать (не отмечено): Dictionary >

6
ответ дан 27 November 2019 в 02:39
поделиться
Другие вопросы по тегам:

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