在数组中计算 Razor 和 Umbraco 中相同值的项目数
Count in an Array a number of same value Items in Razor , Umbraco
我有一组记录
Model.Categories = ["apple", "banana", "apple", "orange"]
我正在从这个数组中一条一条地显示记录
@foreach (var category in Model.Categories)
{
<a href="@Url.ArticulateCategoryUrl(Model, category)">@category</a>
}
所以这当前显示两次 apple 记录,但我想像这样在旁边显示一次计数
apple -(2)
banana
orange
像这样可以帮助我在 Razor 上实现这个吗?
为此,我们需要在模型中创建方法,它将 return 类别及其出现的字典。请找到以下可用于 return 字典的方法。
public Dictionary<string,int> CountArray()
{
Dictionary<string, int> countArr = new Dictionary<string, int>();
foreach (var category in Categories)
{
if(countArr.ContainsKey(category))
{
countArr[category] = countArr[category] + 1;
}
else
{
countArr[category] = 1;
}
}
return countArr;
}
现在在 cshtml 文件中创建一个变量并从模型中分配此值 returning。
在 foreach 循环中使用此变量。
我想这会帮助您解决问题。
我真的不建议这种方法。但如果您需要帮助,请找到 Razor 代码。
@{ Dictionary<string, int> countarry = new Dictionary<string, int>();}
@foreach (var category in Model.Categories)
{
if (countarry.ContainsKey(category))
{
countarry[category] = countarry[category] + 1;
}
else
{
countarry[category] = 1;
}
}
@foreach (var categoryName in countarry.Keys)
{
if(countarry[categoryName] > 1)
<a href="@Url.ArticulateCategoryUrl(Model, categoryName)">@categoryName - (@countarry[categoryName])</a>
else
<a href="@Url.ArticulateCategoryUrl(Model, categoryName)">@categoryName</a>
}
希望这就是您所期待的。
我有简单的解决方案
var fruits = ["apple","coconut","apple","banana","papaya"];
var sortFruits = [];
对于(水果的水果){
if(sortFruits.includes(fruit)==false){
sortFruits.push(fruit);
}
}
console.log(排序水果);
不确定它是否可以像你所说的那样 "Razor code",但你为什么不使用 Linq GroupBy?
以下代码在浏览器上产生您预期的输出。
@foreach (var category in categories.GroupBy(k => k))
{
<a>@category.Key@(category.Count() > 1 ? $" - ({category.Count()})" : "")</a><br/>
}
以上示例适用于 Razor 3.0.0.0 和 .Net Franework 4.6.1 (C# 6.0)
上面的代码是试题中按预期输出后的结果。如果简单点,可能在早期版本中也能用。
@foreach (var category in categories.GroupBy(k => k))
{
<a>@category.Key - @category.Count()</a><br/>
}
我有一组记录
Model.Categories = ["apple", "banana", "apple", "orange"]
我正在从这个数组中一条一条地显示记录
@foreach (var category in Model.Categories)
{
<a href="@Url.ArticulateCategoryUrl(Model, category)">@category</a>
}
所以这当前显示两次 apple 记录,但我想像这样在旁边显示一次计数
apple -(2)
banana
orange
像这样可以帮助我在 Razor 上实现这个吗?
为此,我们需要在模型中创建方法,它将 return 类别及其出现的字典。请找到以下可用于 return 字典的方法。
public Dictionary<string,int> CountArray()
{
Dictionary<string, int> countArr = new Dictionary<string, int>();
foreach (var category in Categories)
{
if(countArr.ContainsKey(category))
{
countArr[category] = countArr[category] + 1;
}
else
{
countArr[category] = 1;
}
}
return countArr;
}
现在在 cshtml 文件中创建一个变量并从模型中分配此值 returning。 在 foreach 循环中使用此变量。 我想这会帮助您解决问题。
我真的不建议这种方法。但如果您需要帮助,请找到 Razor 代码。
@{ Dictionary<string, int> countarry = new Dictionary<string, int>();}
@foreach (var category in Model.Categories)
{
if (countarry.ContainsKey(category))
{
countarry[category] = countarry[category] + 1;
}
else
{
countarry[category] = 1;
}
}
@foreach (var categoryName in countarry.Keys)
{
if(countarry[categoryName] > 1)
<a href="@Url.ArticulateCategoryUrl(Model, categoryName)">@categoryName - (@countarry[categoryName])</a>
else
<a href="@Url.ArticulateCategoryUrl(Model, categoryName)">@categoryName</a>
}
希望这就是您所期待的。
我有简单的解决方案
var fruits = ["apple","coconut","apple","banana","papaya"];
var sortFruits = []; 对于(水果的水果){
if(sortFruits.includes(fruit)==false){
sortFruits.push(fruit);
}
} console.log(排序水果);
不确定它是否可以像你所说的那样 "Razor code",但你为什么不使用 Linq GroupBy?
以下代码在浏览器上产生您预期的输出。
@foreach (var category in categories.GroupBy(k => k))
{
<a>@category.Key@(category.Count() > 1 ? $" - ({category.Count()})" : "")</a><br/>
}
以上示例适用于 Razor 3.0.0.0 和 .Net Franework 4.6.1 (C# 6.0)
上面的代码是试题中按预期输出后的结果。如果简单点,可能在早期版本中也能用。
@foreach (var category in categories.GroupBy(k => k))
{
<a>@category.Key - @category.Count()</a><br/>
}