Как я могу заполнить свой массив из целых ячеек данных? - PullRequest
0 голосов
/ 19 июня 2010

У меня есть таблица данных, которую я создал ниже, мне нужно перечислить длину ячейки всех строк в таблице данных. мой результат не должен включать значение "0". Но мой список: 19,19,19,19,19, 0.0.0.0..0.0 ..... и так почему? Как я могу увидеть длину моего массива?

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

namespace DataTables
{
    class Program
    {
        static void Main(string[] args)
        {
            DataTable table = GetTable();
            int[] mySortedLists = new int[table.Rows.Count*table.Columns.Count];
            foreach (DataColumn dc in table.Columns)
            {
                foreach (DataRow dr in table.Rows)
                {
                    Console.WriteLine(dr[dc].ToString().Length);
                }
                Console.WriteLine("\t");
            }

            Console.WriteLine("--------------------------------------");

            for (int i = 0; i < table.Rows.Count; i++)
           {
                for (int j = 0; j < table.Columns.Count; j++)
                {
                    mySortedLists[i] += table.Rows[i][j].ToString().Length;
                }
            }

            foreach (var mySortedList in mySortedLists)
            {
                Console.WriteLine(mySortedList.ToString() + "\n");
            }

            Console.ReadKey();
        }

        static DataTable GetTable()
        {
            //
            // Here we create a DataTable with four columns.
            //
            DataTable table = new DataTable();
            table.Columns.Add("Dosage", typeof(int));
            table.Columns.Add("Drug", typeof(string));
            table.Columns.Add("Patient", typeof(string));
            table.Columns.Add("Date", typeof(DateTime));

            //
            // Here we add five DataRows.
            //
            table.Rows.Add(25, "Indocin", "David", DateTime.Now);
            table.Rows.Add(50, "Enebrel", "Sam", DateTime.Now);
            table.Rows.Add(10, "Hydralazine", "Christoff", DateTime.Now);
            table.Rows.Add(21, "Combivent", "Janet", DateTime.Now);
            table.Rows.Add(100, "Dilantin", "Melanie", DateTime.Now);

            return table;
        }
    }
}

Пожалуйста, помогите мне!

Ответы [ 3 ]

0 голосов
/ 19 июня 2010

Вы объявляете, что mySortedLists имеют длину table.Rows.Count * table.Columns.Count, но вы используете только первые table.Rows.Count записи.Если вам нужно одно значение длины на строку, то вы, вероятно, захотите:

int[] mySortedLists = new int[table.Rows.Count];

Или, если вы хотите одно значение длины на ячейку, вам нужен двумерный массив:

int[,] mySortedLists = new int[table.Rows.Count, table.Columns.Count];
...
mySortedLists[i, j] += table.Rows[i][j].ToString().Length;

Или вы хотите сгладить индексы массива:

mySortedLists[i * table.Columns.Count + j] += table.Rows[i][j].ToString().Length;
0 голосов
/ 19 июня 2010

Я не могу сказать, пытаетесь ли вы получить общую длину ячеек каждой строки или индивидуальную длину каждой ячейки в каждой строке. Ваш массив объявлен с длиной, которая будет поддерживать последний сценарий, но вы присваиваете ему значения только для первого сценария. Вот два метода Linq для получения сохраненных значений длины, первый из которых помещает длины в зубчатый массив, который будет иметь длину каждого поля.

int[][] lengths;

using (DataTable table = GetTable())
{
    lengths = (from DataRow row in table.Rows
                select
                (from DataColumn col in table.Columns
                select row[col].ToString().Length).ToArray()).ToArray();
}

foreach (int[] row in lengths)
{
    Console.WriteLine(string.Join(",", row));
}

Второй запускает то же самое, но выполняет агрегирование в конце, где раньше был первый .ToArray (), поэтому он получает общую длину каждой отдельной строки и сохраняет ее в массиве.

int[] array;

using (DataTable table = GetTable())
{
    array = (from DataRow row in table.Rows
                select
                (from DataColumn col in table.Columns
                select row[col].ToString().Length).Sum()).ToArray();
}

foreach (int value in array)
    Console.WriteLine(value);
0 голосов
/ 19 июня 2010

Если я не понимаю, чего вы пытаетесь достичь, ваша проблема в том, как вы объявляете массив mySortedLists. Вы хотите, чтобы это объявлялось так:

int[] mySortedLists = new int[table.Rows.Count];

Чтобы увидеть длину вашего массива, вы можете использовать

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