एक सीएसवी फ़ाइल में डेटा से शब्दकोशों का शब्दकोश कैसे पॉप्युलेट करें

मेरे पास सीएसवी फ़ाइल में कक्षा, छात्र आईडी और छात्र नाम के बारे में कुछ डेटा है, जैसे निम्न:

4, 3, जॉन (कक्षा, अशिष्ट आईडी, छात्र का नाम)

3, 3, जेन

4, 4, हैरी

2, 3, हैरी

3, 5, जेनी

2, 1, जो

I need to read the above data into a SortedDictionary> structure, where the outer dictionary stores the class as key, and the inner dictionary stores student id and student name.

मेरा कोड फॉलोलो की तरह थोड़ा सा है:

string line = string.Empty;
string[] data = null;

SortedDictionary studentDictionary = new SortedDictionary();
SortedDictionary> classDictionary = new SortedDictionary>();

using (StreamReader sr = new StreamReader(schoolCSV))
{
    while (!sr.EndOfStream)
    {
        line = sr.ReadLine();
        data = line.Split(new char[] { ',' }, StringSplitOptions.None);
        studentDictionary.Add(Convert.ToInt32(data[1].Trim()), data[2]);
       //I get error in the above line, when it parses the second row
    }
}

मैं क्रमबद्ध शब्दकोशों के क्रमबद्ध शब्दकोश में इसे सही तरीके से पुनर्प्राप्त करने में असमर्थ हूं। क्या कोई मुझे सही रास्ता दिखा सकता है?

0
अभी, आपके कोड में केवल एक studentDictionary है। आपको प्रत्येक वर्ग के लिए studentDictionary बनाने की आवश्यकता है।
जोड़ा लेखक mbeckish, स्रोत
कृपया उस भाषा को निर्दिष्ट करें जिसका आप उपयोग कर रहे हैं और उपयुक्त टैग सेट करें।
जोड़ा लेखक fuesika, स्रोत

1 उत्तर

LINQ का एक छोटा सा मदद कर सकता है।

First, you'll need an extension method to convert an IEnumerable to a SortedDictionary:

using System;
using System.Collections.Generic;

namespace YourNamespace
{
   public static class SortedDictionaryExtensions
   {
      public static SortedDictionary ToSortedDictionary(
         this IEnumerable source,
         Func keySelector,
         Func valueSelector)
      {
         var result = new SortedDictionary();

         foreach (TSource item in source)
         {
            TKey key = keySelector(item);
            TValue value = valueSelector(item);
            result.Add(key, value);
         }

         return result;
      }
   }
}

फिर आप परिणामों को उत्पन्न करने के लिए अपनी नई एक्सटेंशन विधि के साथ GroupBy को जोड़ सकते हैं:

SortedDictionary> classDictionary;

classDictionary = File.ReadLines(schoolCSV)
   .Select(line => line.Split(','))
   .Select(data => new 
   { 
      ClassId = int.Parse(data[0]),
      StudentId = int.Parse(data[1]),
      StudentName = data[2]
   })
   .GroupBy(item => item.ClassId, (key, items) => new
   {
      ClassId = key,
      Students = items.ToSortedDictionary(i => i.StudentId, i => i.StudentName)
   })
   .ToSortedDictionary(item => item.ClassId, item => item.Students);
0
जोड़ा