簡體   English   中英

找到不同的2D數組對

[英]Find distinct pairs of a 2D array

我有這個函數來返回數組的不同元素:

public static object[] Distinct(object[] array)
{
     return array.Select(x => x.ToString()).Distinct().ToArray();
}

我想將它擴展到一個有2列的矩陣,它應該返回不同的對。

這顯然不起作用:

public static object[,] Distinct(object[,] array)
{
    return array.Select((x,y) => x.ToString(), y.ToString()).Distinct().ToArray();
}

但我認為它很好地展示了我正在嘗試做的事情。 任何指針都會很棒。

您可以將2D數組轉換為Tuple序列,然后在其上運行Distinct 然后將其轉換回2D數組。

public static object[,] Distinct(object[,] array)
{
    var distinct = Enumerable.Range(0, array.GetLength(0))
        .Select(i => Tuple.Create(array[i, 0].ToString(), array[i, 1].ToString()))
        .Distinct()
        .ToList();
    var newArray = new object[distinct.Count, 2];
    for (int i = 0; i < distinct.Count; i++)
    {
        newArray[i, 0] = distinct[i].Item1;
        newArray[i, 1] = distinct[i].Item2;
    }

    return newArray;
}

請注意,這假設數組的第二個維度的長度> = 2,如果它大於那么它只返回前2個位置的值。

最終你會用泛型的擴展方法嗎?

public static T[,] Distinct<T>(this T[,] array)
{
    var result = Enumerable.Range(0, array.GetLength(0))
        .Select(i => new { x = array[i, 0], y = array[i, 1] })
        .Distinct();

    T[,] ret = new T[result.Count(), 2];
    for (int i = 0; i < result.Count(); i++)
    {
        ret[i, 0] = result.ElementAt(i).x;
        ret[i, 1] = result.ElementAt(i).y;
    }

    return ret;
}

所以這是可能的:

int[,] test = new int[,] { { 1, 2 }, { 1, 3 }, { 2, 4 }, { 1, 3 } };
var result = test.Distinct();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM