Jan
Jan

Reputation: 25

Dictionary<string, List <KeyValuePair<string,string>>>

I have created:

Dictionary<string, List <KeyValuePair<string,string>>> diction = new Dictionary<string, List<KeyValuePair<string,string>>>();

Later I've added to that list:

diction.Add(firststring, new List<KeyValuePair<string,string>>());
diction[firststring].Add(new KeyValuePair<string, string>(1ststringlist, 2ndstringlist));

So now, If I want to read and show on screen this dictionary, how would I do it with foreach loop ? It's like 3 dimmension syntax, don't now how to create it and access it.

Also can anyone explain how to read this part?

diction[firststring].Add

What this marks [] excatly mean? I read whole dictionary there?

thank You for answer and Your time.

Upvotes: 0

Views: 5050

Answers (3)

Roy Dictus
Roy Dictus

Reputation: 33149

If all you need to do is store rows of 3 string values each, then the data structure you are using is far too complicated.

Here's a much simpler example, based on the Tuple class:

public class Triplet : Tuple<string, string, string>
{
    public Triplet(string item1, string item2, string item3) : base(item1, item2, item3)
    {
    }
}

So you just define a class Triplet that holds 3 strings, like above. Then you simply create a List of Triplets in your code:

// Your code here
var data = new List<Triplet>();

// Add rows
data.Add(new Triplet("John", "Paul", "George"));
data.Add(new Triplet("Gene", "Paul", "Ace"));

// Display
foreach(Triplet row in data)
{
    Console.WriteLine("{0}, {1}, {2}", row.Item1, row.Item2, row.Item3);
}

and this is far simpler to read, understand, and maintain.

Upvotes: 0

Selman Gen&#231;
Selman Gen&#231;

Reputation: 101731

Dictionaries store key / value pairs. In your case, your key type is string and value type is List <KeyValuePair<string,string>>.So when you do:

diction[firststring]

firststring is your Key and you are trying to access a List <KeyValuePair<string,string>>.Your best option is nested loops I think.if you want to display all values. For example:

foreach(var key in dict.Keys)
{
   // dict[key] returns List <KeyValuePair<string,string>>
   foreach(var value in dict[key])
   {
      // here type of value is  KeyValuePair<string,string>

      var currentValue = value.Value;
      var currentKey = value.Key;

   }
}

Upvotes: 6

ChaseMedallion
ChaseMedallion

Reputation: 21794

For printing the datastructure, try this:

// string.Join(separator, enumerable) concatenates the enumerable together with 
// the separator string
var result = string.Join(
    Environment.NewLine,
    // on each line, we'll render key: {list}, using string.Join again to create a nice
    // string for the list value
    diction.Select(kvp => kvp.Key + ": " + string.Join(", ", kvp.Value)
);
Console.WriteLine(result);

In general, to loop over the values of a dictionary, you can use foreach or LINQ just like with any IEnumerable data structure. IDictionary is an IEnumerable>, so the foreach variable will be of type KeyValuePair.

The syntax diction[key] allows you to get or set the value of the dictionary stored at the index key. It's similar to how array[i] lets you get or set the array value at index i. For example:

var dict = new Dictionary<string, int>();
dict["a"] = 2;
Console.WriteLine(dict["a"]); // prints 2

Upvotes: 2

Related Questions