繁体   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