簡體   English   中英

返回多維鋸齒狀數組作為C#中的數組

[英]return multidimensional jagged array as an array in c#


我有一個多維鋸齒形的字符串數組:

string[,][] MDJA = 
{
    {new string[]{"a", "b"}, new string[]{"c", "d"}, new string[]{"e", "f"}},
    {new string[]{"g", "h"}, new string[]{"j", "i"}, new string[]{"k", "l"}},
    {new string[]{"m", "n"}, new string[]{"o", "p"}, new string[]{"q", "r"}}
}

我正在使用for循環比較數組在數組中的位置,以獲取所需的數組,但是MDJA在方法內部,我希望它返回特定的數組。 例如,我可能想返回

new string[]{"m", "n"}

通常,我會在多維數組中執行此操作:

for (byte i = 0; i < 3; i++)
{
    if (var1[x] == var2[i])
    {
        return answers[y,i]
    }
}

但是我之前並沒有使用鋸齒狀的數組,而當多維使用它們時,則很難獲得信息。

PS 4個變量是方法中的參數,var1和var2是字符串數組,x / y是整數。

感謝您的幫助。

我不太確定您的方法邏輯是什么樣子,但是關於元素訪問,它應該是很簡單的:

for (int i = 0; i < MDJA.GetLength(0); i++)
{
    for (int j = 0; j < MDJA.GetLength(1); j++)
    {
        // Your compare logics go here
        //
        bool found = i == 2 && j == 0;
        if (found)
        {
            return MDJA[i, j];
        }
    }
}

這將返回string[]{"m", "n"}

我以前做過此事,可惜我這里沒有代碼。

構建一個實用的方法,以遞歸方式調用自身,測試數組元素是否為數組本身,如果不是(則為一個值),則將其添加到List中,否則將子/子數組傳遞給遞歸方法。

提示,使用Array對象作為此方法的參數,而不是定義的int[,][]數組,因此可以傳遞任何形式的crazy int[,][][][,,,][][,]並且仍然可以使用。

對於您的問題,您將必須檢測到要停止從交錯數組轉換為值的級別,然后以簡化數組的形式返回那些交錯數組。

稍后我會發布我的代碼,可能會對您有所幫助。

    public static int Count(Array pValues)
    {
        int count = 0;

        foreach(object value in pValues)
        {
            if(value.GetType().IsArray)
            {
                count += Count((Array) value);
            }
            else
            {
                count ++;
            }
        }

        return count;
    }

暫無
暫無

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

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