如何在c#中像在Javascript中一样匹配两个数组
本文关键字:数组 两个 一样 Javascript | 更新日期: 2023-09-27 18:08:31
为了确保两个数组在Javascript中是相同的,这就是我所做的:(在item1中缺少数据的地方插入零)
var viewModel = @Html.Raw(Json.Encode(Model));
var items = viewModel.Date1;
var items2 = viewModel.Date2;
items = items2.map( row =>
//is there a matching row in items?
items.filter( r => r.theString == row.theString).length == 0 ?
//if not, fill with zeros
{theString:0, theCount:0} :
//if there is, return the items' row
items.filter( r => r.theString == row.theString)[0] );
我将柱状图中的数据用作百分比。我需要以表的形式显示结果,其中包含实际的计数数,如下所示:
<div style="padding-top: 30px">
<table id="table_id" class="display">
<thead>
<tr>
<th>Month</th>
<th>Cancelled</th>
<th>Total</th>
</tr>
</thead>
<tbody>
@using (var e1 = Model.Date1.Reverse().GetEnumerator())
{
using (var e2 = Model.Date2.Reverse().GetEnumerator())
{
while (e1.MoveNext() && e2.MoveNext())
{
var item1 = e1.Current;
var item2 = e2.Current;
<tr>
<td>@item1.theDate.Value.ToString("MMMM-yyyy") </td>
<td>@item1.theCount</td>
<td>@item2.theCount</td>
</tr>
}
}
}
</tbody>
</table>
</div>
问题是这些数组没有被修复以相互匹配,所以它显示的数据是不正确的。日期(theDate)与值不匹配
或者我可以从javascript中使用items和items2来制作表吗?
应该这样做:
@foreach (var item1 in Model.Date1.Reverse())
{
var item2Count = Model.Date2.Where(i2 => i2.theDate == item1.theDate)
.Select(i2 => i2.theCount)
.FirstOrDefault();
<tr>
<td>@item1.theDate.Value.ToString("MMMM-yyyy") </td>
<td>@item1.theCount</td>
<td>@item2Count</td>
</tr>
}
这与你发布的JavaScript具有相同的n²
渐近复杂性,所以如果你有非常大量的项目,你可能会看到缓慢的性能。可以通过创建对Date2
值的查找来解决这个问题,如下所示:
@{
var item2CountsByDate = Model.Date2.ToLookup(i => i.theDate, i => i.theCount);
foreach (var item1 in Model.Date1.Reverse())
{
var item2Count = item2CountsByDate[item1.theDate]
.FirstOrDefault();
<tr>
<td>@item1.theDate.Value.ToString("MMMM-yyyy") </td>
<td>@item1.theCount</td>
<td>@item2Count</td>
</tr>
}
}