Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#按字符串名称排序/排序列表-[n]x[n]_C#_.net_Asp.net Mvc_Sorting - Fatal编程技术网

C#按字符串名称排序/排序列表-[n]x[n]

C#按字符串名称排序/排序列表-[n]x[n],c#,.net,asp.net-mvc,sorting,C#,.net,Asp.net Mvc,Sorting,我有一个C语言的列表,需要按名称排序。名称是棚屋的大小,因此从以下开始: 4x4顶棚 20x6顶棚 10x6顶棚 当我按名称订购时,它会选择10x6作为第一个,但4x4应该是第一个。我想这辆1号正在提货,而且是这样订购的 我有这个: allProducts = allProducts.OrderBy(x => x.Name).ToList(); 按名称排序的最佳方法是什么-[n]x[n]和最有效的方法?这不是特别“有效”,因为字符串混合这类东西不是很有效,但您可以使用正则表达式提取维

我有一个C语言的列表,需要按名称排序。名称是棚屋的大小,因此从以下开始:

  • 4x4顶棚
  • 20x6顶棚
  • 10x6顶棚
当我按名称订购时,它会选择10x6作为第一个,但4x4应该是第一个。我想这辆1号正在提货,而且是这样订购的

我有这个:

allProducts = allProducts.OrderBy(x => x.Name).ToList();
按名称排序的最佳方法是什么-[n]x[n]和最有效的方法?

这不是特别“有效”,因为字符串混合这类东西不是很有效,但您可以使用正则表达式提取维度并根据您的规则进行排序。假设您的规则是“按面积排序”,即宽度乘以深度:

var regex = new Regex(@"(?<a>\d+)\s*x\s*(?<b>\d+)");
var input = new List<string>
{
    "4x4 Apex Shed",
    "20x6 Apex Shed",
    "10x6 Apex Shed"
};
    
var result = input.OrderBy(x => {
        var match = regex.Match(x);
        var a = int.Parse(match.Groups["a"].Value);
        var b = int.Parse(match.Groups["b"].Value);
        return a * b;
});
var regex=新的regex(@“(?)


如果您想使此方法更有效,请将数据存储为具有宽度、深度和名称属性的对象,并适当地排序,而不是试图从字符串中解析这些值。

这里的轴规则是什么?20x6是在6x20之前还是之后?模式实际上是
[a]x[b]
而不是
[n]x[n]
那么通常如何对
a
b
进行排序?因此您希望按照[n]x[m]的评估值进行排序?嗨,看起来很接近,但是当我有以下内容时:var输入=新列表{“4x4顶点棚”、“20x6顶点棚”、“4x6顶点棚”、“6x4顶点棚”、“8x6顶点棚”、“8x4顶点棚”、“10x6顶点棚”10x4顶棚“};也不一样,8x6在10x4Ok之后,所以@NeilHodges我再问一次-排序规则是什么?你只想按第一个维度排序吗?它需要先按第一个维度排序,然后再按以下维度排序。8x6应该在10x4之前,如果是第一个维度,它仍然应该在10之前排序8。