我有很多东西
MyObjects[] mos = GetMyObjectsArray();
现在我想把一些id为1085的元素移到first,所以我在linq中编写了这样的代码,有没有更优雅的方法?
mos.Where(c => c.ID == 1085).Take(1).Concat(mos.Where(c => c.ID != 1085)).ToArray();
注意,我想保存其他项的位置,因此使用第一项进行填充不是一个解决方案
最佳答案
这不是linq,而是我对数组的处理方式。
public static bool MoveToFront<T>(this T[] mos, Predicate<T> match)
{
if (mos.Length == 0)
{
return false;
}
var idx = Array.FindIndex(mos, match);
if (idx == -1)
{
return false;
}
var tmp = mos[idx];
Array.Copy(mos, 0, mos, 1, idx);
mos[0] = tmp;
return true;
}
用途:
MyObject[] mos = GetArray();
mos.MoveToFront(c => c.ID == 1085);