2016-04-06 72 views
0

我正在實現遞歸中值切割算法https://en.wikipedia.org/wiki/Median_cut,並且出現問題,我返回它說「operator +不能應用於List和List類型的操作數」。c#在遞歸返回中添加兩個列表

這裏是我的代碼,所以你得到的要問一下我的見解:

public static List<Color> Cut(List<Color> input,int n) 
    { 
     if (n == 1) 
     { 
      //creating List<Color> containing 1 color element which is 
      //average of all colors from input and returning this 1 element 
      //list ending our recursion 
     } 

     else 
     { 
      SortWithRespectToWidestChannel(input) 
      int median = input.Count/2; 
      List<Color> l1 = new List<Color>(); 
      List<Color> l2 = new List<Color>(); 
      l1.AddRange(input.GetRange(0, median)); 
      l2.AddRange(input.GetRange(median, input.Count - median)); 

      return Cut(l1, n/2) + Cut(l2, n/2); // <---**here is problem** 
     } 

所以,你知道我怎麼能解決我的問題呢? 預先感謝您。

+0

你想在'List '上使用'+'操作符來實現什麼?你需要一個包含所有顏色的列表嗎? –

+0

[在C#.NET中將兩個(或多個)列表合併成一個]的可能重複(http://stackoverflow.com/questions/4488054/merge-two-or-more-lists-int-one-in-c -sharp-net) – Sinatr

回答

0

如果您想要在一個列表中包含所有顏色,請嘗試此操作。

變化:

return Cut(l1, n/2) + Cut(l2, n/2); // <---**here is problem** 

var result = new List<Color>(); 
    result.AddRange(Cut(l1, n/2)); 
    result.AddRange(Cut(l2, n/2)); 

    return result; 

給我的反饋,如果我糾正你的問題的事情。

+0

謝謝你的回答,我只是改變了我的迴歸:return new List (Cut(l1,n/2).Concat(Cut(l2,n/2)));它很好地工作,但你的解決方案也應該工作,謝謝。 – HackTheGibson