如何使用linq和没有linq的Copareto对2D数组进行排序。我可以用list generic做到这一点。但我不喜欢它。你能对它有任何想法吗?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
namespace TestFillArray
{
class Program
{
static void Main(string[] args)
{
DataTable table = GetTable();
int[,] mySortedLists = new int[table.Rows.Count, table.Columns.Count];
for (int i = 0; i < table.Rows.Count; i++)
{
for (int j = 0; j < table.Columns.Count; j++)
{
mySortedLists[i, j] += table.Rows[i][j].ToString().Length;
}
}
List<int> list = new List<int>();
for (int i = 0; i < table.Rows.Count; i++)
{
for (int j = 0; j < 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;
}
}
DataTable table = GetTable();
int[,] mySortedLists = new int[table.Rows.Count, table.Columns.Count];
for (int i = 0; i < table.Rows.Count; i++)
{
for (int j = 0; j < table.Columns.Count; j++)
{
mySortedLists[i, j] += table.Rows[i][j].ToString().Length;
}
}
List<int> list = new List<int>();
for (int i = 0; i < table.Rows.Count; i++)
{
for (int j = 0; j < 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;
}
}
答案 0 :(得分:1)
你的问题不是很清楚 - 你有什么样的输入,你希望得到什么输出?
根据您的示例,您似乎只想将2D数组的所有元素作为单个列表,然后对元素执行一些操作。要将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();