List排序问题.8,3,5,1,9,4

nyq1999 2009-09-24 07:15:46
一个实体List<T>取出来是按1-100的ID顺序的,现在需要按一个已定无规则字符串的方式将list排序,如8,3,5,1,9,4,100,33,57....的顺序将List实体取出,有什么好的建议吗?
...全文
186 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
24K純帥 2009-09-30
  • 打赏
  • 举报
回复
应该就是Dictionary吧。。
nyq1999 2009-09-30
  • 打赏
  • 举报
回复
也可能简单的事情说复杂了
就是会有一个ID字符串,是外部给定的(6,3,23,25,12,56,5656,565656.....很多)
现在要求返回一个LIST<T>,里边的T.ID是按给定的字符串顺序排的(或者说是foreach这个list输出id时应该就是给定字符串ID的顺序)
有什么好的写法没?目前能想到的就是Dictionary.....
yymycabbage 2009-09-25
  • 打赏
  • 举报
回复
lz这样的需求适合用Dictionary来实现,按照特定无规则顺序存取对象都很方便,
如果用list,因为lz的数据不是1-100的完整顺序排列,单个查找还是比较费力。
wuyi8808 2009-09-25
  • 打赏
  • 举报
回复
using System;
using System.Collections.Generic;

class T
{
public int id;
public string value;

public T(int id, string value)
{
this.id = id;
this.value = value;
}
}

class Program
{
// 自定义的比较方法
static int CompareById(T x, T y)
{
return x.id - y.id;
}

static void Main()
{
// 构造输入数据
List<T> list = new List<T>();
// select * from table where id in (8,3,5,1,9,4,100,33,57,...)获取的
foreach (int i in new int[]{8,3,5,1,9,4,100,33,57,})
list.Add(new T(i, ""));

list.Sort(CompareById); // <------------------ 排序!

// 输出排序后的结果:
foreach (T t in list)
Console.WriteLine(t.id);
}
}
/* 输出:
1
3
4
5
8
9
33
57
100
*/
nyq1999 2009-09-25
  • 打赏
  • 举报
回复
List<T>中怎么按T.ID取最快
nyq1999 2009-09-25
  • 打赏
  • 举报
回复
大哥,理解错了吧
xie_yanke 2009-09-24
  • 打赏
  • 举报
回复
List<int> list = new List<int>();
list.Add(1);
list.Add(2);
list.Add(3);
list.Add(4);
list.Add(5);
list.Add(6);
....

Random r = new Random();
list = (from x in list orderby r.Next(1, list.Count<int>()) select x).ToList<int>();

生成随机的不按原顺序的list.
nyq1999 2009-09-24
  • 打赏
  • 举报
回复
int[] key = {8,3,5,1,9,4,100,33,57,...};
List<T> list = ...;(select * from table where id in (8,3,5,1,9,4,100,33,57,...)获取的)
List<T> listSorted = new List<T>();
Dictionary <T> dic=new Dictionary <T>();
foreach (T t in list)
{
dic.Add(t.id,t)
}
foreach (int i in key)
{
listSorted.Add(dic[i]);
}
return listSorted;

这样实现满足需求,有好方法吗?

tommir3 2009-09-24
  • 打赏
  • 举报
回复
继承IComparer然后重写,
然后用Array.Sort();
lzsh0622 2009-09-24
  • 打赏
  • 举报
回复
呵呵,理解错了? 1楼举个完整的简短的例子.
wuyi8808 2009-09-24
  • 打赏
  • 举报
回复
int[] key = {8,3,5,1,9,4,100,33,57,...};
List<T> list = ...;
List<T> listSorted = new List<T>();
foreach (int i in key)
{
listSorted.Add(list[i-1]);
}
// listSorted 就是按新的顺序排好的。
lzsh0622 2009-09-24
  • 打赏
  • 举报
回复
1楼正解
nyq1999 2009-09-24
  • 打赏
  • 举报
回复
一个实体List <T>取出来是按1-100的ID顺序的
=========================================
这个是按ID顺序排得,但是不是1,2,3,4..这样,是1,2,5,7,9,55...这种的
wuyi8808 2009-09-24
  • 打赏
  • 举报
回复
List<T> list = ...;
int[] key = {8,3,5,1,9,4,100,33,57,};
foreach (int i in key)
{
T x = list[i]; // 取出。
}

110,571

社区成员

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

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

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