一个数组的list集合如何按照数组中的两个元素排序

abcd_ufo 2010-12-27 10:55:15
List<String[]> list = new ArrayList<String[]>();

list.add(new String[] { "1.2", "2.9", "1.4" });
list.add(new String[] { "1.5", "1.6", "1.7" });
list.add(new String[] { "1.2", "1.9", "2.0" });
list.add(new String[] { "2.1", "2.2", "2.3" });
list.add(new String[] { "2.4", "2.5", "2.6" });


用第一列排序 如果数组中的第一个元素的值相同 则按照第二个元素排序

这个问题怎么实现 希望前辈们帮忙

我这里有一段java代码 但是 java提供的方法和 c#不同 我变不成c#代码 如果需要看下 java 代码 我马上贴出!
...全文
678 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
abcd_ufo 2010-12-27
  • 打赏
  • 举报
回复
o 谢谢你了 了 visir 前辈 我可以加一下你的q吗 有什么问题 你可以帮我吗
visir 2010-12-27
  • 打赏
  • 举报
回复
datatable要重组你的数据结构, 完了后你不得不又转回成list, 可能你的需求不一样, 不一定要转回来了

linq不是.net 2.0的东西

Sort是一个方法, 接收一个委托类型作为参数, 看看书上委托相关的章节就明白了
abcd_ufo 2010-12-27
  • 打赏
  • 举报
回复

Valefish 前辈说 用datable 我实现了

wuyazhe 前辈 说的用法 var res = from s in list orderby s[0], s[1] select s;
我在我vs里面using 不了linq 可能是我用的vs2005 我怎么才可以用linq呢? 是不是得添加一个引用 如果是 麻烦告诉我一下 是什么?

visir 前辈说的这种方法 可以实现 我也通过手写实现了


delegate(string[] lhs, string[] rhs)
{
if (lhs[0].CompareTo(rhs[0]) > 0) return 1;
else if (rhs[0].CompareTo(lhs[0]) > 0) return -1;
else if (lhs[1].CompareTo(rhs[1]) > 0) return 1;
else if (rhs[1].CompareTo(lhs[1]) > 0) return -1;
else return 0;
}

非常感谢 各位前辈 能在百忙中 帮我解决问题 但是还有 就是 delegate 是委托 这个怎么用啊 我看到 sort的构造函数里面就没有 这个参数啊 这个我用的时候怎么用呢 谢谢
visir 2010-12-27
  • 打赏
  • 举报
回复
list.Sort(

delegate(string[] lhs, string[] rhs)
{
if (lhs[0] > rhs[0]) return 1;
else if (rhs[0] > lhs[0]) return -1;
else if (lhs[1] > rhs[1]) return 1;
else if (rhs[1] > lhs[1]) return -1;
else return 0;
}


);


现在的人真懒
兔子-顾问 2010-12-27
  • 打赏
  • 举报
回复
List<String[]> list = new List<String[]>();

list.Add(new String[] { "1.2", "2.9", "1.4" });
list.Add(new String[] { "1.5", "1.6", "1.7" });
list.Add(new String[] { "1.2", "1.9", "2.0" });
list.Add(new String[] { "2.1", "2.2", "2.3" });
list.Add(new String[] { "2.4", "2.5", "2.6" });

var res = from s in list orderby s[0], s[1] select s;
list = res.ToList();
foreach (string[] item in list)
{
MessageBox.Show(item[0] + "\r\n" + item[1]);
}
visir 2010-12-27
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 qianzai5765638 的回复:]
引用 12 楼 visir 的回复:
list.Sort(

delegate(string[] lhs, string[] rhs)
{
# 伪码
if (lhs > rhs) return 1;
else if (rhs > lhs) return -1;
else return 0;
}


);

都说了是伪码, 两个数组谁大谁小你自己去确定



我刚试了 报错 if (lhs > rhs) 数组不可以……
[/Quote]
TimZhuFaith 2010-12-27
  • 打赏
  • 举报
回复
list.Sort((first,second)=>first[0].CompareTo(second[0]));
abcd_ufo 2010-12-27
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 visir 的回复:]
list.Sort(

delegate(string[] lhs, string[] rhs)
{
# 伪码
if (lhs > rhs) return 1;
else if (rhs > lhs) return -1;
else return 0;
}


);
[/Quote]


我刚试了 报错 if (lhs > rhs) 数组不可以那样比较
visir 2010-12-27
  • 打赏
  • 举报
回复
list.Sort(

delegate(string[] lhs, string[] rhs)
{
# 伪码
if (lhs > rhs) return 1;
else if (rhs > lhs) return -1;
else return 0;
}


);
visir 2010-12-27
  • 打赏
  • 举报
回复
vs2005 List<T>.Sort
abcd_ufo 2010-12-27
  • 打赏
  • 举报
回复
哦 我先试一下
Valefish 2010-12-27
  • 打赏
  • 举报
回复
用DataTable也行 再用它的Select方法
具体看MSDN很清楚的
abcd_ufo 2010-12-27
  • 打赏
  • 举报
回复
我现在用的是vs2005 是不是不能用啊
abcd_ufo 2010-12-27
  • 打赏
  • 举报
回复
using System.Linq;

我这里在 顶部写不出来
TimZhuFaith 2010-12-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 qianzai5765638 的回复:]
引用 4 楼 timzhufaith 的回复:
var li = list.OrderBy(l => l[0]).ThenBy(l=>l[1]);


这个怎么用啊 在winform里面
[/Quote]using System.Linq;
abcd_ufo 2010-12-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 timzhufaith 的回复:]
var li = list.OrderBy(l => l[0]).ThenBy(l=>l[1]);
[/Quote]

这个怎么用啊 在winform里面
TimZhuFaith 2010-12-27
  • 打赏
  • 举报
回复
var li = list.OrderBy(l => l[0]).ThenBy(l=>l[1]);
abcd_ufo 2010-12-27
  • 打赏
  • 举报
回复
怎么用啊
billsquall 2010-12-27
  • 打赏
  • 举报
回复
使用linQ orderby
abcd_ufo 2010-12-27
  • 打赏
  • 举报
回复
希望大家都帮我看下 啊

110,566

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧