Svi*_*ish 10 c# sorting shuffle
我读过这篇关于卡片改组的帖子,在许多改组和排序算法中你需要交换列表或数组中的两个项目.但优质高效的Swap方法是什么样的呢?
让我们说一个T[]和一个List<T>.您如何才能最好地实现在这两个项目中交换两个项目的方法?
Swap(ref cards[i], ref cards[n]); // How is Swap implemented?
Run Code Online (Sandbox Code Playgroud)
Mar*_*ell 25
那么,你发布的代码(ref cards[n])只能使用一个数组(而不是一个列表) - 但你会简单地使用(where foo和bar是两个值):
static void Swap(ref int foo, ref int bar) {
int tmp = foo;
foo = bar;
bar = tmp;
}
Run Code Online (Sandbox Code Playgroud)
或者可能(如果你想要原子):
Interlocked.Exchange(ref foo, ref bar);
Run Code Online (Sandbox Code Playgroud)
就个人而言,我不认为我会打扰交换方法 - 只是直接做; 这意味着您可以使用(无论是列表还是数组):
int tmp = cards[n];
cards[n] = cards[i];
cards[i] = tmp;
Run Code Online (Sandbox Code Playgroud)
如果你真的想编写一个可以处理列表或数组的交换方法,你必须做类似的事情:
static void Swap(IList<int> list, int indexA, int indexB)
{
int tmp = list[indexA];
list[indexA] = list[indexB];
list[indexB] = tmp;
}
Run Code Online (Sandbox Code Playgroud)
(使这种通用变得微不足道) - 然而,在阵列上工作的原始"内联"版本(即不是方法)会更快.
| 归档时间: |
|
| 查看次数: |
25290 次 |
| 最近记录: |