Mar*_*iko 74 .net c# linq sorting
我有以下课程:
class Detail
{
public Detail()
{
_details = new List<string>();
}
public IList<string> Details { get { return _details; } }
private readonly List<string> _details;
}
Run Code Online (Sandbox Code Playgroud)
目前我使用以下方法随机对类进行排序:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我想做的是按字母顺序对细节内容进行排序.
例如,如果内容如下所示:
[0] a
[1] d
[2] b
Run Code Online (Sandbox Code Playgroud)
我希望能够运行此方法并将它们分类到:
[0] a
[1] b
[2] d
Run Code Online (Sandbox Code Playgroud)
有谁知道这样做的简单方法?请注意,列表通常少于十个条目.我可以用LINQ做到这一点吗?抱歉,我对LINQ不太熟悉我刚刚听到一个建议,我可以使用它.
Jon*_*eet 139
您可以通过调用以下方式对列表进行排序List<T>.Sort
:
list.Sort();
Run Code Online (Sandbox Code Playgroud)
这将使用元素的自然排序,这在您的情况下很好.
编辑:请注意,在您的代码中,您需要
_details.Sort();
Run Code Online (Sandbox Code Playgroud)
因为该Sort
方法仅定义于List<T>
,而不是IList<T>
.如果您需要从外部对它进行排序,而您无权访问它List<T>
(您不应该将其作为List<T>
部分是实现细节),您需要做更多的工作.
我不知道IList<T>
.NET中有任何基于inb的排序,现在我想起来有点奇怪.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];
}
}
Run Code Online (Sandbox Code Playgroud)
换句话说,复制,就地排序,然后将排序后的列表复制回来.
您可以使用LINQ创建一个包含原始值但已排序的新列表:
var sortedList = list.OrderBy(x => x).ToList();
Run Code Online (Sandbox Code Playgroud)
这取决于你想要的行为.请注意,您的shuffle方法并不是很理想:
Random
在方法中创建一个新的问题会遇到这里显示的一些问题val
在循环中声明- 你没有使用那个默认值Count
当你知道你正在使用该属性时,使用该属性更为惯用IList<T>
for
循环比用while
循环向后遍历列表更容易理解还有其他一些在Stack Overflow上使用Fisher-Yates进行混乱的实现 - 搜索,你会很快找到一个.
小智 22
有两种方法:
没有LINQ: yourList.Sort();
使用LINQ: yourList.OrderBy(x => x).ToList()
您可以在以下网址找到更多信息:http://www.dotnetperls.com/sort-string-array
lah*_*rah 19
其他方式
_details.Sort((s1, s2) => s1.CompareTo(s2));
Run Code Online (Sandbox Code Playgroud)
Qui*_*son 11
你应该可以OrderBy
在LINQ中使用......
var sortedItems = myList.OrderBy(s => s);
Run Code Online (Sandbox Code Playgroud)