如果我有一个数字列表:
1,2,3,4,5,6,7,8
我想按特定的编号订购,然后显示其余的。例如,如果我选择“ 3”,则列表应为:
3,1,2,4,5,6,7,8
寻找linq和C#。谢谢
Answers:
您可以在中使用比较OrderBy
或ThenBy
执行条件排序。
list.OrderByDescending(i => i == 3).ThenBy(i => i);
我使用OrderByDescending
是因为我要首先匹配结果(true
“”比更高false
)。
myDataList.OrderByDescending(i => i.StringColumnValue[0] == filterStringValue[0]).ToList()
。我在这里用了你的逻辑。基于过滤器首个字母,这些结果显示在同一起跑线字母顺序
几个答案已经对最后几个数字进行了排序(这可能是正确的,因为您只显示已排序的列表)。如果您希望“未选择的”数字以其原始的顺序显示(不一定是排序顺序而不是排序顺序),则可以执行;
int num = 3;
var result = list.Where(x => x == num).Concat(list.Where(x => x != num));
正如@DuaneTheriot指出的那样,IEnumerable的扩展方法OrderBy进行稳定的排序,并且不会更改具有相同键的元素的顺序。换一种说法;
var result = list.OrderBy(x => x != 3);
同样可以将3排在第一位,并保持所有其他元素的顺序。
list.OrderBy(i => i != 3)
。
public static IEnumerable<T> TakeAndOrder<T>(this IEnumerable<T> items, Func<T, bool> f)
{
foreach ( var item in items.Where(f))
yield return item;
foreach (var item in items.Where(i=>!f(i)).OrderBy(i=>i))
yield return item;
}
var items = new [] {1, 4, 2, 5, 3};
items.TakeAndOrder(i=> i == 4);
OrderByDescending
来OrderBy
或i == 3
到i != 3