按价格和类似名称对值进行分组

本文关键字: | 更新日期: 2023-09-27 18:26:47

我有一个这样的数组:

[{Name:".com.in", Price: 3},{Name:".net.in", Price:3}, {Name:".org.in", Price:5}, {Name:".com", Price:9},{Name:".net", Price:9},{Name:".in", Price:3}]

我想将这些值按优先级分组:价格,类似的域扩展

  • {名称:".com.in",价格:3},{姓名:".net.in"
  • {名称:".org.in",价格:5}=>与.com.in名称相似,但价格不同
  • {名称:".com",价格:9}
  • {名称:".net",价格:9}=>与.com价格相同,但名称不同
  • {名称:".in",价格:3}

我试着循环浏览这些值,但似乎不是一个好主意。我打开服务器端的c#或angularjs,undercorejs。

按价格和类似名称对值进行分组

您可以使用angular.filter模块的groupBy。

只需从这里添加JS文件:http://www.cdnjs.com/libraries/angular-filter并使用以下代码。

var myApp = angular.module('myApp',['angular.filter']);
function MyCtrl($scope) {    
    $scope.items = [
        {Name:".com.in", Price: 3},
        {Name:".net.in", Price:3}, 
        {Name:".org.in", Price:5}, 
        {Name:".com", Price:9},
        {Name:".net", Price:9},
        {Name:".in", Price:3}
    ];
}
div ng-controller="MyCtrl">
    <ul ng-repeat="(key, value) in items | groupBy: 'Price'">
        <b>Price: {{ key }}</b>
      <li ng-repeat="item in value">
          item: <i> {{ item.Name }} </i>
      </li>
    </ul>
</div>

如果我完全理解你,这就是你想要的。

这是JSFiddle的工作示例。

。。。

我建议使用List<T>来存储项目,而不是使用数组。

然后可以使用List.Sort(IComparer comp)对列表进行排序。

然后,您可以构建多个IComparer对象,根据您想要的内容对对象进行排序(一个比较器用于价格,另一个用于名称,另一个子…)

如果比较器同时使用分组和优先级逻辑,那么结果将是一个长列表,其中的元素按组和优先级排序。即

Compare(Object x, Object y)
{
    MyItem i1 = (MyItem)x;
    MyItem i2 = (MyItem)y;
    if(i1.Price != i2.Price)
    {
        //sort by group
        return (i1.Price < i2.Price);
    }
    else
    {
        //sort priority within group
        return LevenshteinDistance(i1.Name,i2.Name);
    }
}
private int LevenshteinDistance(string s1, string s2)
{
    ...
}

如果您需要计算组边界,请使用另一个仅具有组逻辑的IComparer(即,如果IComparel说A<B,则A和B是不同的组)。按顺序处理列表时,请使用此比较器。

相关文章:
  • 没有找到相关文章