我的陣列低於如何獲得最大價值相同長度的數組在C#
int[] T1 = new int[]{1,5,4};
int[] T2 = new int[]{2,4,3};
int[] T3 = new int[]{7,9,1};
我想它是如下順序的結果。
int[] result = {7,9,4}
我想查找數組中最大值相同的索引[(例如1,2,7))。
和合並數組是int[] result = {7,9,4}
請讓我知道最好的辦法
感謝
我的陣列低於如何獲得最大價值相同長度的數組在C#
int[] T1 = new int[]{1,5,4};
int[] T2 = new int[]{2,4,3};
int[] T3 = new int[]{7,9,1};
我想它是如下順序的結果。
int[] result = {7,9,4}
我想查找數組中最大值相同的索引[(例如1,2,7))。
和合並數組是int[] result = {7,9,4}
請讓我知道最好的辦法
感謝
以下是實現所需的簡單方法操作。
int[] result = new int[T1.Length];
for (int i = 0; i < T1.Length; i++)
{
result[i] = new[] {T1[i], T2[i], T3[i]}.Max();
}
你必須爲了使Max()
擴展添加using System.Linq
。
編輯
下面是允許你使用任意數量的陣列的方法:
static T[] MaxElements<T>(params T[][] arrays) where T : IComparable<T>
{
return Enumerable.Range(0, arrays[0].Length)
.Select(i => Enumerable.Range(0, arrays.Length)
.Select(a => arrays[a][i]).Max()).ToArray();
}
你必須添加using System.Linq;
這一個了。您必須確保傳入的所有元素具有相同的長度,否則將遇到IndexOutOfRangeException
。
它可以使用如下:
var result = MaxElements(T1, T2, T3);
這僅限於3個陣列。 –
@MohammadMirMostafa:查看更新。它允許你使用任意數量的數組。 –
是的。這更好。謝謝 –
這裏是你需要的東西:
static void Main(string[] args)
{
GetMaxArray(new[] { 1, 5, 4 }, new[] { 2, 4, 3 }, new[] { 7, 9, 1 });
}
private static void GetMaxArray(params int[][] m)
{
var length = m.First().Length;
var r = new int[length];
for (var i = 0; i < length; i++)
r[i] = m.Select(a => a[i]).Max();
}
public int[] GetMaxValueArray(List<int[]> arrayList)
{
int[] result = null;
int maxArraySize;
int maxCurrentArrayItemValue;
if (arrayList != null && arrayList.Count > 0)
{
maxArraySize = 0;
foreach (int[] array in arrayList)
if (array.Length > maxArraySize)
maxArraySize = array.Length;
result = new int[maxArraySize];
for (int i = 0; i < maxArraySize; i++)
{
maxCurrentArrayItemValue = 0;
foreach (int[] array in arrayList)
if (i < array.Length)
if (array[i] > maxCurrentArrayItemValue)
maxCurrentArrayItemValue = array[i];
result[i] = maxCurrentArrayItemValue;
}
}
return result;
}
你能具體化你的問題? –
我認爲使用for循環將是這裏最好的方法,例如:for(i = 0 to arraylength){比較位置i上的元素,添加到數組最大元素}' – wudzik
@wudzik您能向我展示示例源嗎? – HighEndGuy