2016-12-30 40 views
0

在我的应用程序中,我有2个按钮,允许用户通过“名称”或“分数”对单元格进行排序。我遇到了排序问题 - 我如何检查单元格是否已经通过这两个类别排序。单击按钮后,对UITableViewSource中的单元格进行排序。 c#Xamarin

我是Xamarin的新人,至今我都没有提出任何问题。

我已经排序列表并获得通用结果,但仅用于第一次排序,即升序。提前

nameSort.TouchUpInside += (sender, e) => 
      { 

       Sort(ascending, "name"); 

       tableView.ReloadData(); 
      }; 

      scoreSort.TouchUpInside += (sender, e) => 
      { 

       Sort(ascending, "score"); 

       tableView.ReloadData(); 

      }; 

感谢:

而且这并没有为我工作:

  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)); 
       } 
      } 
     } 

按钮事件!

回答

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); 

的排序依据方法返回排序列表,离开原来的list不变,所以这样的:只有

if (list.SequenceEqual(orderedByAsc)) 

会评估为true如果列表已在您调用list.OrderBy(l => l.name);之前排序,则在排序后没有更改时发生IOW。 SequenceEqual比较两个列表,看他们是否相同,但在这种情况下,他们不会,除非注意到原始list已经按升序排序。

List.Sort然而确实修改列表本身。这些线看起来很好,应该工作,所以我认为问题是由于上面提到的内容,bool ascending值没有正确设置。

我希望这有助于! PS:这不是真正的Xamarin问题,它是一个.NET/Linq问题。

相关问题