单击按钮后,在UITableViewSource中对单元格进行排序。 c#Xamarin

时间:2016-12-30 09:23:22

标签: c# linq sorting xamarin

在我的应用程序中,我有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();

            };

提前致谢!

1 个答案:

答案 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问题。