ищет подходящую структуру данных (предпочтительно словарь и список) для этого сценария - PullRequest
2 голосов
/ 25 октября 2011

При вызове метода объект получает его.

Из этого объекта я могу получить две вещи: свойство ItemData и свойство Row, например:

oPTL.ItemData, oPTL.Row

Я хочу иметь структуру данных, чтобы при каждом вызове этого метода он мог обновлять эту структуру данных, поэтому, например, один раз oPTL.ItemData равен "Spread1", а oPTL.Row равен 2, поэтому мы можем сохранить что Spread1 имеет значение 2 ... при следующем вызове, например, мы должны быть в состоянии сохранить «Spread3» имеет значение 3. Следующий вызов «Spread1» также имеет значение 4 и т. д. ...

Так что это похоже на Dictionary<String,<List>>, но все же у меня есть проблема с объявлением и использованием его таким образом в коде, любой пример кода, с которым вы можете мне помочь?

Ответы [ 2 ]

2 голосов
/ 25 октября 2011

Вы можете использовать словарь, где значения являются списками:

IDictionary<string, List<int>> rows = new Dictionary<string, List<int>>();

Для заполнения вы можете использовать этот метод расширения:

public static class DictionaryDefaultExtension
{
    public static TValue GetOrDefault<TKey, TValue>(
        this IDictionary<TKey, TValue> dictionary,
        TKey key,
        Func<TValue> defaultValue)
    {
        TValue result;
        if (dictionary.TryGetValue(key, out result))
        {
            return result;
        }
        else
        {
            TValue value = defaultValue();
            dictionary[key] = value;
            return value;
        }
    }
} 

Используйте вот так:

d.GetOrDefault(oPTL.ItemData, () => new List<int>()).Add(oPTL.Row);
2 голосов
/ 25 октября 2011

То, что вы ищете, это Dictionary<string, List<int>> - при условии, что ваши свойства .ItemData и .Row на самом деле string и int соответственно.

Когда выпрочитав элемент со значением «Spread1», вы сначала проверяете, существует ли такой ключ в словаре, вызывая метод .ContainsKey(string).Если это так, вы добавляете новое значение Row - если нет, вы создаете новый ключ с новым списком, как в примере ниже:

var myItems = new Dictionary<string, List<int>>();
// ...
if (myItems.ContainsKey(newItem.ItemData))
{
    // myItems[newItem.ItemData] actually contains List<int> we created at some
    // point in the other part of if-else. 
    // The .Add method we call here belongs to List
    List<int> itemValues = myItems[newItem.ItemData];
    itemValues.Add(newItem.Row);
}
else
{
    myItems.Add(newItem.ItemData, new List<int> { newItem.Row });
}

Отредактировано , чтобы добавить пояснение с двумя .Add методы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...