Мне нужно сохранить пару неуникальных строк, поэтому у меня может быть что-то вроде:

"A", "B" "A","C"

Я не могу использовать Dictionary или HashTable, потому что у меня нет уникального ключа. Подумал над парочкой вариантов:

List<List<string>,List<string>> = new List<List<string>,List<string>>(); //Too long?

Создайте класс или структуру (что лучше?) Для хранения моих пар, а затем сохраните их в списке, поэтому

class pairs
{

}

List<pairs> values = new List<pairs>();

Мне также просто нужно иметь возможность перечислять пары, поэтому мне не нужно беспокоиться о запросах, сортировке и сравнении. По этой причине лучше всего использовать наименее конкретный тип, например Enumerable?

2
Xaisoft 26 Авг 2011 в 05:28

3 ответа

Лучший ответ

Вы должны уметь использовать List<KeyValuePair<string, string>>.

Сами по себе структуры KeyValuePair<TKey, TValue> не требуют уникальных ключей, даже если вы собираете их в один список.

Если вы думаете, что KVP семантически не соответствуют тому, что вы хотите, просто выберите собственный тип. Не имеет значения, является ли ваш настраиваемый тип классом или структурой.

10
BoltClock 26 Авг 2011 в 01:39

А как насчет просто List<string[]>?

var list = new List<string[]>();

list.Add(new [] { "A", "B"});

foreach(var pair in list)
{
   Console.WriteLine(pair[0] + pair[1]);
}
2
scottm 26 Авг 2011 в 01:42

Вы можете использовать List<KeyValuePair<string,string>>, но чтобы избежать семантики ключа (поскольку вы сказали, что он не является уникальным), я бы использовал List<Tuple<string,string>>, который практически такой же но с другой семантикой.

0
Adam Jones 26 Авг 2011 в 01:35