簡體   English   中英

使用鋸齒狀數組

[英]Using jagged arrays

考慮以下代碼。

public string[][] CalculateDistance(string origin, string destination)
{
        string[][] result = new string[1][];

        string url = "MyUrl"
        string requesturl = url;
        string content = fileGetContents(requesturl);
        JObject o = JObject.Parse(content);
        result[0] = new string[2];
        result[0][0] = (string)o.SelectToken("routes[0].legs[0].distance.text");
        result[0][1] = (string)o.SelectToken("routes[0].legs[0].duration.text");

        string[][] myArray = new string[2][];
        for (int i = 0; i < result.Length; i++)
        {
            string[] innerArray = result[i];
        }
        return result;
}

我正在嘗試返回一個鋸齒狀數組,然后在 wpf 應用程序中的 ListView 上使用該數組。 如果我在for循環中使用Console.WriteLine(innerArray)顯示正確的結果。 但是當我在ListView顯示時

字符串[][] 數組

有人可以告訴我我哪里出錯了。 我以前從未使用過鋸齒狀數組,所以我發現很難弄清楚我做錯了什么。

XMAL 代碼如下所示:

<ListView Name="MyList" HorizontalAlignment="Left" Height="315" Margin="1289,425,-435,0" VerticalAlignment="Top" Width="421">
        <ListView.View>
            <GridView>
                <GridViewColumn Header="Name"
                DisplayMemberBinding="{Binding Time}"
                Width="100"/>
            </GridView>
        </ListView.View>
</ListView>

以及將項目添加到我使用的列表的后端:

foreach (var items in GetAddress())
{
  MyList.Items.Add(new Distance() { Time = distance.CalculateDistance(items.FromPostCode, items.DestinationPostCode) });
}

距離類看起來像

public class Distance
{
    public string[][] Time { get; set; }
    //More properties 
}

首先,將您的列表視圖更改為這樣的內容以進行正確的數據綁定。 (使用您自己的可選長度和屬性。)

<ListView x:Name="MyList" Height="299" Width="497">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Miles" Width="100" DisplayMemberBinding="{Binding Miles}"/>
            <GridViewColumn Header="Mins" Width="100" DisplayMemberBinding="{Binding Mins}"/>
        </GridView>
    </ListView.View>
</ListView>

這是鋸齒狀數組的示例使用。

string[][] list = new[] {new[] {"Hello", "Bye"}, new[] {"Hey", "Ho"}, new[] {"Yep", "Nope"}};
MyList.ItemsSource = list.Select(x => new {Miles = x[0], Mins = x[1]});

但我不明白你使用鋸齒狀數組的原因。 您已經在創建 1 個長度。 那沒有意義。 只需使用長度為 2 的單個數組。如果您需要將其用於尚未顯示的其他內容,那么您必須顯示它,然后我也會更新我的答案。 目前我刪除了不必要的部分。

public string[] CalculateDistance(string origin, string destination)
{
    string[] result = new string[2];

    string url = "MyUrl"
    string requesturl = url;
    string content = fileGetContents(requesturl);

    JObject o = JObject.Parse(content);

    result[0] = (string)o.SelectToken("routes[0].legs[0].distance.text");
    result[1] = (string)o.SelectToken("routes[0].legs[0].duration.text");

    return result;
}

然后當你想要填充項目時。 請注意,您也不需要Distance類。 如果您只將它用於綁定屬性,那么只需編寫new {}來創建匿名類型,而不是完美地工作。

foreach (var items in GetAddress())
{
    var d = distance.CalculateDistance(items.FromPostCode, items.DestinationPostCode);
    MyList.Items.Add(new { Miles = d[0], Mins = d[1] });
}

暫無
暫無

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

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