Как отсортировать двумерный массив с помощью linq и метода Compareto? - PullRequest
0 голосов
/ 19 июня 2010

Как мне отсортировать 2D массив с linq и без linq с Copareto.я могу сделать это с помощью списка generic.Но мне это не нравится.Вы можете дать какое-нибудь представление об этом?

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;</p>

<p>namespace TestFillArray
{
    class Program
    {
        static void Main(string[] args)
        {</p>

<code>        DataTable table = GetTable();
        int[,] mySortedLists = new int[table.Rows.Count, table.Columns.Count];
        for (int i = 0; i &#60; table.Rows.Count; i++)
        {
            for (int j = 0; j &#60; table.Columns.Count; j++)
            {
                mySortedLists[i, j] += table.Rows[i][j].ToString().Length;
            }
        }

        List&#60;int&#62; list = new List&#60;int&#62;();

        for (int i = 0; i &#60; table.Rows.Count; i++)
        {
            for (int j = 0; j &#60; table.Columns.Count; j++)
            {
                Console.WriteLine(mySortedLists[i, j].ToString());
                list.Add(int.Parse(mySortedLists[i, j].ToString()));
            }
        }

        list.Sort();
        list.Reverse();

        foreach (int item in list)
        {
            Console.WriteLine(item.ToString());
        }
        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;
    }
}

}

1 Ответ

1 голос
/ 19 июня 2010

Ваш вопрос не очень ясен - какой у вас ввод и какой вывод вы хотите получить в результате?

На основании вашего примера кажется, что вы просто хотите получить всеэлементы двумерного массива в виде одного списка, а затем выполнить некоторые операции с элементами.Чтобы преобразовать 2D-массив в один IEnumerable, содержащий все элементы, вы можете написать:

IEnumerable<T> AsEnumerable(this T[,] arr) {
  for(int i = 0; i < arr.GetLength(0); i++)
    for(int j = 0; j < arr.GetLength(1); j++)
      yield return arr[i, j];
}

, а затем написать, например:

int[,] data = // get data somwhere
// After 'AsEnumerable' you can use all standard LINQ operations
var res = data.AsEnumerable().OrderBy(n => n).Reverse();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...