2017-05-04 23 views
-2

我有一個問題如何在一行代碼中連接或聯合3個數組? 我有Visual Studio的2015年,它看起來像Concat/union 3數組在一起C#

int[] array1 = {1 ,2 ,3 ,-5 ,2 ,0 }; 
int[] array2 = {1 ,2 ,3 ,-1 ,5 ,0 }; 
int[] array3 = {1 ,2 ,3 ,-6 ,2 ,9 }; 

,我想在點擊鏈接到有這樣的:

Console.WriteLine(array1.Union(array2.Union(array3)).Where((x) => x >=0).Count) 

說不上RLY如何聯盟3陣列中的單行

+1

工會和連接是不一樣的東西。你想讓你的結果看起來像什麼? – RH6

+1

你剛剛做到了,有什麼「不知道」? –

+0

它不工作不知道爲什麼。我想要顯示來自這3個數組的所有獨特的正值,並且我想要在單行中有這個 –

回答

2

你的代碼的問題是在Where子句之後Count是一個函數而不是屬性。

另外一個更好的方法是鏈接Union。你也可以放置在Count而不是謂語:

Console.WriteLine(array1.Union(array2).Union(array3).Count(x => x >= 0)); 

要打印所有陣列的唯一正值使用string.Join

Console.WriteLine(string.Join(",", array1.Union(array2).Union(array3).Where(x => x >= 0))); 
//Prints: 1, 2, 3, 0, 5, 9 
+0

究竟是如何實際的string.Join使這個工作正確? –

+0

@DamianRożkowicz - 查看鏈接添加 –

+0

是的,這是工作謝謝你的幫助我的評論沒有土地在這裏 –

0

對於一個聯盟,你只需要

array1.Union(array2).Union(array3) 

然後您可以編寫和/或計算生成的IEnumerable。一個工會忽略重複:如果要保留所有的所有3門陣列(和繼續數組,而不是一些列表/集合型),你可以做的值:

var concatenated = new int[array1.Length + array2.Length + array3.Length]; 
array1.CopyTo(concatenated, 0); 
array2.CopyTo(concatenated, array1.Length); 
array3.CopyTo(concatenated, array1.Length + array2.Length); 
+0

奧基感謝您的幫助! :) –

0

下面將通過調用的毗連串聯陣列。

然後通過調用Distinct刪除複製的數字。

最後通過調用謂詞大於或等於零的Where來過濾數字。

 var arr1 = new[] {1, 2, 3, -5, 2, 0}; 
     var arr2 = new[] {1, 2, 3, -1, 5, 0}; 
     var arr3 = new[] {1, 2, 3, -6, 2, 9}; 
     var result = arr1 
      .Concat(arr2) 
      .Concat(arr3) 
      .Distinct() 
      .Where(i => i >= 0) 
      .ToArray();