gpt4 book ai didi

c# - 按字母顺序对列表进行排序

转载 作者:IT王子 更新时间:2023-10-29 03:42:19 34 4
gpt4 key购买 nike

我有以下类(class):

class Detail
{
public Detail()
{
_details = new List<string>();
}
public IList<string> Details { get { return _details; } }
private readonly List<string> _details;
}

目前我使用以下方法对类(class)进行随机排序:

void ShuffleGenericList<T>(IList<T> list)
{
//generate a Random instance
var rnd = new Random();
//get the count of items in the list
var i = list.Count();
//do we have a reference type or a value type
T val = default(T);

//we will loop through the list backwards
while (i >= 1)
{
//decrement our counter
i--;
//grab the next random item from the list
var nextIndex = rnd.Next(i, list.Count());
val = list[nextIndex];
//start swapping values
list[nextIndex] = list[i];
list[i] = val;
}
}

我想做的是按字母顺序对详细信息的内容进行排序。

例如,如果内容看起来像这样:

[0] a
[1] d
[2] b

我希望能够运行此方法并将它们分类为:

[0] a
[1] b
[2] d

有谁知道一个简单的方法来做到这一点?请注意,列表中的条目通常少于十个。我可以用 LINQ 做到这一点吗?抱歉,我对 LINQ 不是很熟悉,我刚刚听到有人建议我可以使用它。

最佳答案

只需调用 List<T>.Sort 就可以就地对列表进行排序:

list.Sort();

这将使用元素的自然顺序,这对您来说很好。

编辑:请注意,在您的代码中,您需要

_details.Sort();

作为Sort方法仅在 List<T> 中定义, 不是 IList<T> .如果您需要从外部对其进行排序,而您无法将其作为 List<T> 访问(您不应该将其转换为 List<T> 部分是一个实现细节)您需要做更多的工作。

不知道任何IList<T> .NET 中基于 -based 的就地排序,现在我想起来有点奇怪。 IList<T>提供了您需要的一切,因此可以将其编写为扩展方法。如果您想使用其中的一种,有很多快速排序实现。

如果你不在乎效率低下,你总是可以使用:

public void Sort<T>(IList<T> list)
{
List<T> tmp = new List<T>(list);
tmp.Sort();
for (int i = 0; i < tmp.Count; i++)
{
list[i] = tmp[i];
}
}

换句话说,复制,就地排序,然后将排序后的列表复制回来。


您可以使用 LINQ 创建一个包含原始值但已排序的列表:

var sortedList = list.OrderBy(x => x).ToList();

这取决于您想要的行为。请注意,您的随机播放方法并不是很理想:

  • 正在创建一个新的 Random在方法中遇到一些问题 shown here
  • 你可以声明val在循环内 - 你没有使用那个默认值
  • 使用 Count 更为惯用当您知道您正在使用 IList<T> 时的属性
  • 在我看来,for循环比使用 while 向后遍历列表更容易理解循环

在 Stack Overflow 上还有其他使用 Fisher-Yates 进行洗牌的实现 - 搜索一下,您会很快找到一个。

关于c# - 按字母顺序对列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6965337/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com