在我的应用程序中,我有2个按钮,允许用户通过" name"或"得分"。我有一个排序问题 - 如何检查单元格是否已经通过这两个类别排序。
我是Xamarin的新手,到目前为止我还没有把所有东西都搞定。
我已经在排序列表并获得常见结果,但仅适用于升序的第一次排序。
这对我也不起作用:
var orderedByAsc = list.OrderBy(l => l.name);
if (list.SequenceEqual(orderedByAsc))
{
ascending = true;
}
var orderedByDsc = list.OrderByDescending(l => l.name);
if (list.SequenceEqual(orderedByDsc))
{
ascending = false;
}
排序:
void Sort(bool ascending, string type)
{
if (type.Equals("name"))
{
if (ascending)
{
list.Sort((x, y) => x.name.CompareTo(y.name));
}
else
{
list.Sort((x, y) => -1 * x.name.CompareTo(y.name));
}
}
else
{
if (ascending)
{
list.Sort((x, y) => x.score.CompareTo(y.score));
}
else
{
list.Sort((x, y) => -1 * x.score.CompareTo(y.score));
}
}
}
按钮事件:
nameSort.TouchUpInside += (sender, e) =>
{
Sort(ascending, "name");
tableView.ReloadData();
};
scoreSort.TouchUpInside += (sender, e) =>
{
Sort(ascending, "score");
tableView.ReloadData();
};
提前致谢!
答案 0 :(得分:1)
首先你说:
这对我也不起作用:
var orderedByAsc = list.OrderBy(l => l.name);
if (list.SequenceEqual(orderedByAsc))
{
ascending = true;
}
var orderedByDsc = list.OrderByDescending(l => l.name);
if (list.SequenceEqual(orderedByDsc))
{
ascending = false;
}
什么特别不起作用?我会假设你或许没有意识到list
本身并没有改变:
var orderedByAsc = list.OrderBy(l => l.name);
OrderBy方法返回已排序的列表,原始list
保持不变,因此:
if (list.SequenceEqual(orderedByAsc))
如果列表在您调用true
之前已经排序,将仅评估为list.OrderBy(l => l.name);
,如果排序后没有更改,则为IOW。 SequenceEqual
比较两个列表以查看它们是否相同,但在这种情况下它们不会相同,除非另有说明,原始list
已经按升序排序。
List.Sort
会修改列表本身。这些行看起来很好并且应该有效,所以我认为问题是由于上面提到的内容,bool ascending
值没有正确设置。
我希望这有帮助!
PS:这不是一个xamarin问题,它是一个.NET / Linq问题。