2014-01-06 1 views
1

У меня есть 2 списка, как показано ниже,Чтобы получить данные в список

List<object>[] data = new List<object>[4]; 
List<HMData>[] Data_Content = new List<HMData>[7]; 
int indexer=0; 

And also I have 3 list as LValues,IValues and BValues each containing 28 data values as follows 

LValues={L1,L2,L3....L28}, 
IValues={I1,I2,I3...I28}, 
BValues={B1,B2,B3....B28}, 

foreach (var item in Read_xml_for_childobjects_id.Root.Descendants("object")) // Contains 4 Items 
    { 
for (int k = 0; k < 7; k++) 
    { 
     Data_Content[k] = new List<HMData>(); 
     Value_LfromList = LValues.ElementAt(k); 
     Value_IfromList = IValues.ElementAt(k); 
     Value_BfromList = BValues.ElementAt(k); 

     Data_Content[k].Add(new HMData { x = Value_LfromList, y = Value_IfromList, z = Value_BfromList }); 
     } 
     data[indexer] = new List<object>(Data_Content); 
     indexer++; 
    } 

теперь я хочу выход быть следующим,

data=[{L1,I1,B1},{L2,I2,B2},{L3,I3,B3},{L4,L4,B4},{L5,I5,B5},{L6,I6,B6},{L7,I7,B7}], 
data=[{L8,I8,B8},{L9,I9,B9},{L10,I10,B10},{L11,I11,B11},{L12,I12,B12},{L13,I13,B13},{L14,I14,B14}], 
data=[{L15,I15,B15},{L16,I16,B16},{L17,I17,B17},{L18,I18,B18},{L19,I19,B19},{L20,I20,B20},{L21,I21,B21}], 
data=[{L22,I22,B22},{L23,I23,B23},{L24,I24,B24},{L25,I25,B25},{L26,I26,B26},{L27,I27,B27}{L28,I28,B28}]. 

Теперь, если в течение цикла для к, если я принять условие, как for (int k = 0; k < 7; k++) тогда я получаю выход следующим образом,

data=[{L1,I1,B1},{L2,I2,B2}.....{L7,I7,B7}], 
data=[{L1,I1,B1},{L2,I2,B2}.....{L7,I7,B7}], 
data=[{L1,I1,B1},{L2,I2,B2}.....{L7,I7,B7}], 
data=[{L1,I1,B1},{L2,I2,B2}.....{L7,I7,B7}], 

поскольку он встречает только первые 7 элементов списка каждый раз, когда цикл RU ns

И если я беру цикл для (int k = 0; k < 28; k++), так как у меня есть всего 28 элементов в каждом списке, то после того, как список Data_Content заполнен 7 элементами, так как это то, что я хотел, и когда встречается 8 элементов, я получаю ошибка в

Index was outside of bounds of the array.. 

Любая помощь будет принята с благодарностью, я знаю, я поставил еще два вопроса, по той же проблеме, но я сомневаюсь, что я не был в состоянии объяснить мою проблему должным образом, я надеюсь, что этот вопрос ясен,

------- обновленный вопрос -------

for (int k = 0; k < 4; k++) 
    { 
    for (int l = 0; l < 7; l++) 
    { 
     Value_LfromList = LValues.ElementAt((k * 7) + l); 
     Value_IfromList = IValues.ElementAt((k * 7) + l); 
     Value_BfromList = BValues.ElementAt((k * 7) + l); 
     Data_Content.Add(new HMData { x = Value_LfromList, y = Value_IfromList, z = Value_BfromList }); 
      } 
     data.Add(Data_Content); 
     } 
    } 

    var data_List = new { data = data }; 
    var series = new[] { data_List }; 
    var obj = new {chart,series }; 
    string result = jSearializer.Serialize(obj); 

поэтому выход я получаю следующим образом,

{"chart":{"type":"bubble"}, 
"series": 
    [ 
     {"data": 
     [ 
      {"x":7,"y":7,"z":49},{"x":7,"y":7,"z":49},{"x":7,"y":9,"z":63}, 
      {"x":5,"y":9,"z":45},{"x":4,"y":3,"z":12},{"x":2,"y":6,"z":12}, 
      {"x":3,"y":5,"z":15},{"x":7,"y":8,"z":56},{"x":7,"y":8,"z":56}, 
      {"x":7,"y":8,"z":56},{"x":9,"y":6,"z":54},{"x":5,"y":7,"z":35}, 
      {"x":3,"y":8,"z":24},{"x":4,"y":3,"z":12},{"x":7,"y":8,"z":56}, 
      {"x":7,"y":8,"z":56},{"x":7,"y":8,"z":56},{"x":8,"y":7,"z":56}, 
      {"x":5,"y":7,"z":35},{"x":3,"y":7,"z":21},{"x":5,"y":8,"z":40}, 
      {"x":3,"y":7,"z":21},{"x":3,"y":7,"z":21},{"x":5,"y":2,"z":10}, 
      {"x":5,"y":2,"z":10},{"x":8,"y":6,"z":48},{"x":7,"y":3,"z":21}, 
      {"x":6,"y":7,"z":42} 
     ] 
     } 
    ] 
} 

Теперь выход я хочу, это как следует,

{"chart":{"type":"bubble"}, 
"series": 
    [ 
     {"data": 
     [ 
      {"x":7,"y":7,"z":49},{"x":7,"y":7,"z":49},{"x":7,"y":9,"z":63}, 
      {"x":5,"y":9,"z":45},{"x":4,"y":3,"z":12},{"x":2,"y":6,"z":12}, 
      {"x":3,"y":5,"z":15}], 

     "data": 
     [ 
      {"x":7,"y":8,"z":56},{"x":7,"y":8,"z":56},{"x":7,"y":8,"z":56}, 
      {"x":9,"y":6,"z":54},{"x":5,"y":7,"z":35},{"x":3,"y":8,"z":24}, 
      {"x":4,"y":3,"z":12}], 

     "data": 
     [ 
      {"x":7,"y":8,"z":56},{"x":7,"y":8,"z":56},{"x":7,"y":8,"z":56}, 
      {"x":8,"y":7,"z":56},{"x":5,"y":7,"z":35},{"x":3,"y":7,"z":21}, 
      {"x":5,"y":8,"z":40}], 

     "data": 
     [ 
      {"x":3,"y":7,"z":21},{"x":3,"y":7,"z":21},{"x":5,"y":2,"z":10}, 
      {"x":5,"y":2,"z":10},{"x":8,"y":6,"z":48},{"x":7,"y":3,"z":21}, 
      {"x":6,"y":7,"z":42} 
     ] 
     } 
    ] 
}.. 

Я должен преобразовать данные я получаю в формате JSON, чтобы построить график а также тег данных является обязательным ... Надеюсь, я объясню вам ...

------- Обновленный вопрос -------

for (int k = 0; k < 4; k++) 
    { 
    List<HMData> Data_Content = new List<HMData>(); 
    for (int l = 0; l < 7; l++) 
    { 
     Value_LfromList = LValues.ElementAt((k * 7) + l); 
     Value_IfromList = IValues.ElementAt((k * 7) + l); 
     Value_BfromList = BValues.ElementAt((k * 7) + l); 
     Data_Content.Add(new HMData { x = Value_LfromList, y = Value_IfromList, z = Value_BfromList }); 
    } 
    data_list.Add(Data_Content); 
    } 
    var chart = new 
    { 
     type = ChartType 
    }; 
    var data = new { data = data_list }; 
    var series = new[] { data }; 
    var obj = new {chart,series }; 
    string result = jSearializer.Serialize(obj); 

и это мой выход

{"chart":{"type":"bubble"},"series":[{"data":[[{"x":7,"y":7,"z":49}, 
{"x":7,"y":7,"z":49},{"x":7,"y":9,"z":63},{"x":5,"y":9,"z":45},{"x":4,"y":3,"z":12}, 
{"x":2,"y":6,"z":12},{"x":3,"y":5,"z":15}], 
[{"x":7,"y":8,"z":56},{"x":7,"y":8,"z":56}, 
{"x":7,"y":8,"z":56},{"x":9,"y":6,"z":54},{"x":5,"y":7,"z":35},{"x":3,"y":8,"z":24}, 
{"x":4,"y":3,"z":12}], 
[{"x":7,"y":8,"z":56},{"x":7,"y":8,"z":56},{"x":7,"y":8,"z":56}, 
{"x":8,"y":7,"z":56},{"x":5,"y":7,"z":35},{"x":3,"y":7,"z":21},{"x":5,"y":8,"z":40}], 
[{"x":3,"y":7,"z":21},{"x":3,"y":7,"z":21},{"x":5,"y":2,"z":10},{"x":5,"y":2,"z":10}, 
{"x":8,"y":6,"z":48},{"x":7,"y":3,"z":21},{"x":6,"y":7,"z":42}]]}]} 

-------- Обновлено Требуемая мощность -------

{"chart":{"type":"bubble"},"series":[ 
{"data":[[{"x":7,"y":7,"z":49}, 
{"x":7,"y":7,"z":49},{"x":7,"y":9,"z":63},{"x":5,"y":9,"z":45},{"x":4,"y":3,"z":12}, 
{"x":2,"y":6,"z":12},{"x":3,"y":5,"z":15}], 

"data":[{"x":7,"y":8,"z":56},{"x":7,"y":8,"z":56}, 
{"x":7,"y":8,"z":56},{"x":9,"y":6,"z":54},{"x":5,"y":7,"z":35},{"x":3,"y":8,"z":24}, 
{"x":4,"y":3,"z":12}], 


    "data":[{"x":7,"y":8,"z":56},{"x":7,"y":8,"z":56},{"x":7,"y":8,"z":56}, 
{"x":8,"y":7,"z":56},{"x":5,"y":7,"z":35},{"x":3,"y":7,"z":21},{"x":5,"y":8,"z":40}], 


    "data":[{"x":3,"y":7,"z":21},{"x":3,"y":7,"z":21},{"x":5,"y":2,"z":10},{"x":5,"y":2,"z":10}, 
{"x":8,"y":6,"z":48},{"x":7,"y":3,"z":21},{"x":6,"y":7,"z":42}]]}]} 

Я хочу данные слово прийти с каждым списком данных в json-выходе ... который не наступает ....

+0

Список [] Data_Content = новый список [7]; объявляется длиной 7, поэтому она не может быть длиннее? – cubitouch

+0

Я знаю, моя конечная цель состоит в том, чтобы иметь список данных, который содержит 4 списка данных, каждый из которых содержит 7 элементов, а не одни и те же первые 7 элементов, так как мой список, из которого я беру данные, содержит в общей сложности 28 значений каждый. – Reshma

+0

У меня ясно сказано в вопросе, что я хочу и как я делаю .. Если вопрос не ясен, пожалуйста, дайте мне знать, я изменю вопрос, я просто хочу знать, как я могу сделать, чтобы получить желаемый результат ... ??? – Reshma

ответ

1

Ваш код является только кодом psudo и не будет работать. Однако, я думаю, это то, что вы пытаетесь сделать, и предоставил рабочий пример.

internal class Program 
{ 
    private static void Main(string[] args) 
    { 
     List<List<HMData>> data = new List<List<HMData>>(); 

     string[] Ls = 
     { 
      "L1", "L2", "L3", "L4", "L5", "L6", "L7", "L8", "L9", "L10", "L11", "L12", "L13", "L14", 
      "L15", "L16", "L17", "L18", "L19", "L20", "L21", "L22", "L23", "L24", "L25", "L26", "L27", "L28" 
     }; 
     string[] Is = 
     { 
      "I1", "I2", "I3", "I4", "I5", "I6", "I7", "I8", "I9", "I10", "I11", "I12", "I13", "I14", 
      "I15", "I16", "I17", "I18", "I19", "I20", "I21", "I22", "I23", "I24", "I25", "I26", "I27", "I28" 
     }; 
     string[] Bs = 
     { 
      "B1", "B2", "B3", "B4", "B5", "B6", "B7", "B8", "B9", "B10", "B11", "B12", "B13", "B14", 
      "B15", "B16", "B17", "B18", "B19", "B20", "B21", "B22", "B23", "B24", "B25", "B26", "B27", "B28" 
     }; 

     for (int k = 0; k < 4; k++) 
     { 
      List<HMData> Data_Content = new List<HMData>(); 
      for (int j = 0; j < 7; j++) 
      { 
       var l = Ls.ElementAt((k*7) + j); 
       var i = Is.ElementAt((k*7) + j); 
       var b = Bs.ElementAt((k*7) + j); 

       Data_Content.Add(new HMData {x = l, y = i, z = b}); 
      } 

      data.Add(Data_Content); 
     } 

     foreach (var item in data) 
     { 
      Console.Write("data=["); 
      for (int i = 0; i < 6; i++) 
      { 
       Console.Write("{0},",item[i]); 
      } 
      Console.WriteLine("{0}]", item[6]); 

     } 
     Console.ReadLine(); 

    } 
} 


public class HMData 
{ 
    public string x; 
    public string y; 
    public string z; 

    public override string ToString() 
    { 
     return string.Format("{{{0},{1},{2}}}", x, y, z); 
    } 
} 

Выход: run example

------------------------------- редактирования.К OP ---------------------------------- Обратите внимание, что ваш код должен быть таким:

for (int k = 0; k < 4; k++) 
{ 
    List<HMData> Data_Content = new List<HMData>(); 
    .... 
} 

как я сказал в комментариях

+0

внутри цикла j, когда значение j равно 1, а во втором - ошибка при добавлении данных в список Data_content, поскольку ссылка объекта не установлена ​​в экземпляр объекта ... не могли бы вы проверить и сказать, что там не так .. спасибо ... – Reshma

+0

извините, что. починил это. – c0deMonk3y

+0

Ваш код работает с одной проблемой .. в первом списке данных я получаю вывод как data = [{l1, i1, b1}, {l2, i2, b2}, {l3, i3, b3} ... {l7 , i7, b7}, null, null, null, null, null, null], а во втором списке данных также добавляются данные первого списка, такие как data = [{l1, i1, b1}, {l2, i2, b2} .... {l7, i7, b7}, {l8, i8, b8} ... {l14, i14, b14}, null, null, null, null, null] и третьи данные = [{l1, i1, b1}, {l2, i2, b2} .... {l7, i7, b7}, {L8, i8, b8} ... {l14, i14, b14} .... {l21, i21, b21} , null, null, null, null] и последние данные = [{l1, i1, b1}, {l2, i2, b2} .... {l7, i7, b7}, {l8, i8, b8} .. . {l14, i14, b14} .... {l21, i21, b21} ...... {l28, i28, b28}, null, null, null] .. вы можете исправить это – Reshma

0

Вот решение, основанное на операторах Linq, а не на явной итерации. Он использует пакетный оператор из проекта MoreLinq - он доступен на NuGet.

Строка для zip последовательностей L, I и B-значений немного уродлива, но .NET не имеет встроенной последовательности с тремя аргументами zip (zip добавлен в .NET 4.0, альтернативная реализация находится в MoreLinq для более ранних версий). Я бы, вероятно, использовал свой собственный метод расширения.

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

using MoreLinq; 

namespace ConsoleApplication1 
{ 
    class Program 
    { 
     public class HMData  // Dummy HMDta class for test purposes 
     { 
      public string x { get; set; } 
      public string y { get; set; } 
      public string z { get; set; } 
     } 

     static void Main(string[] args) 
     { 
      var inputItems = new List<int>() { 1, 2, 3, 4 }; // Input items from XML document - dummy test list 

      // L, I and B value sequences 
      var LValues = new List<string>() { "L1", "L2", "L3", "L4", "L5", "L6", "L7", "L8", "L9", "L10", "L11", "L12", "L13", "L14", "L15", "L16", "L17", "L18", "L19", "L20", "L21", "L22", "L23", "L24", "L25", "L26", "L27", "L28" }; 
      var IValues = new List<string>() { "I1", "I2", "I3", "I4", "I5", "I6", "I7", "I8", "I9", "I10", "I11", "I12", "I13", "I14", "I15", "I16", "I17", "I18", "I19", "I20", "I21", "I22", "I23", "I24", "I25", "I26", "I27", "I28" }; 
      var BValues = new List<string>() { "B1", "B2", "B3", "B4", "B5", "B6", "B7", "B8", "B9", "B10", "B11", "B12", "B13", "B14", "B15", "B16", "B17", "B18", "B19", "B20", "B21", "B22", "B23", "B24", "B25", "B26", "B27", "B28" }; 

      // Convert our 3 -value sequences into one sequence of HMData objects 
      var zippedValues = LValues.Zip(IValues, (lvalue, bvalue) => Tuple.Create(lvalue, bvalue)).Zip(BValues, (pair, bvalue) => new HMData() { x = pair.Item1, y = pair.Item2, z = bvalue }); 

      // Split the sequence into length of length 7 
      var batchedValues = zippedValues.Batch(7); 

      // For each of the inputItems, output a batch from the -value sequences 
      // (note we will stop output as soon as either the inputItems or the combined -value sequences are exhausted) 
      var data = inputItems.Zip(batchedValues, (item, valueBatch) => valueBatch).ToArray(); 

     } 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^