2016-12-30 38 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問題。

相關問題